2013-11-21 139 views
0

在iOS的視圖控制器I典型地具有這樣的代碼:推薦iOS iOS初始化的推薦方式是什麼?

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

這趨向於得到混亂,所以我添加一個輔助方法(例如createScrollView)到的alloc,init和配置圖。這是建立視圖的既定模式,並且是否存在用於命名輔助方法的約定?我注意到的一件事是名稱initScrollView由於ARC而不被允許。

+2

構建視圖的一個非常常見的模式是使用界面構建器。不過,我認爲它不符合你的需求,對嗎? – dasblinkenlight

+1

最佳做法是儘可能多地在故事板上設置UI,並儘可能少地在代碼中進行操作,因爲正如您所說:混亂。然而,當我必須做一些用戶界面設置時,我會按照你的建議去做,用'createScrollView'這樣的方法完成我需要做的一切,然後從'viewDidLoad'或者某個地方調用該方法說得通。 – nhgrif

+0

我以編程方式構建我的視圖,主要是爲了學習和超越界面生成器提供的內容。 – 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

與-loadView相比,初始化-init中的子視圖是否有優勢? – ide