2013-11-21 3 views
0

В контроллере представления IOS, я обычно имеют код, как:Каков рекомендуемый способ инициализации пользовательского интерфейса iOS?

- (void)viewDidLoad 
{ 
    UIScrollView *scrollView = [[UIScrollView alloc] init]; 
    // [several lines of code to configure the view] 
    [self.view addSubview:scrollView] 
} 

Это, как правило, чтобы получить завален таким образом я добавить вспомогательный метод (например, createScrollView) до Alloc, инициализации и настроить вид. Является ли это установленным шаблоном для построения представлений и существует ли соглашение об именах вспомогательных методов? Одна вещь, которую я заметил, это то, что имя initScrollView запрещено из-за ARC.

+2

Один очень распространенный шаблон для построения представлений - с построителем интерфейса. Я полагаю, что это не соответствует вашим потребностям, правда, правильно? – dasblinkenlight

+1

Лучшая практика заключается в том, чтобы как можно больше настраивать пользовательский интерфейс на раскадровке и как можно меньше в коде, потому что, как вы сказали: беспорядок. Однако, когда мне нужно сделать какой-то пользовательский интерфейс, я просто сделаю так, как вы предложили, с помощью такого метода, как 'createScrollView', который сделает все, что мне нужно, и просто вызовите этот метод из' viewDidLoad' или где-нибудь, что имеет смысл. – nhgrif

+0

Я строю свои взгляды программно главным образом, чтобы узнать и выйти за рамки того, что предоставляет Interface Builder. – ide

ответ

1

Вот модель я следую:

В init/initWithFrame: создавать объекты и устанавливать какие-либо свойства, которые никогда не будут меняться в течение жизни этого контроллера:

- (instancetype) init { 
    self = [super init]; 

    if (self) { 
     _textField = [UITextField new]; 
     _textField.keyboardType = UIKeyboardTypeEmailAddress; 
    } 

    return self; 
} 

Если вы хотите, чтобы отделить их в методы, такие как createTextFields и т. д., это нормально, хотя его легче отлаживать, если вы можете увидеть список всего, созданный в одном месте.

В viewDidLoad, установить иерархию вида:

- (void) viewDidLoad { 
    [self.view addSubview:self.textField]; 
} 

В viewWillLayoutSubviews установите фреймы (если вы не используете автоматическую раскладку):

- (void) viewWillLayoutSubviews { 
    self.textField.frame = CGRectMake(10, 44, 320, 50); 
} 

Этот подход задаст вам для успешной обработки изменений размеров и событий поворота.

+0

Есть ли преимущество для инициализации subviews в -init в отличие от -loadView? – ide

Смежные вопросы