1. 程式人生 > >載入xib檔案、awakeFromNib方法

載入xib檔案、awakeFromNib方法

載入xib檔案

MYView *view = [[[NSBundle mainBundle] loadNibNamed:@"MYView" owner:nil options:nil] firstObject];

// MYView代表MYView.xib,代表MYView這個類對應的xib檔案。這個方法返回的是一個NSArray,我們取第一個Object或最後一個(因為這個陣列只有一個MYView沒有其他物件)就是需要載入的MYView。

  1. 如果使用程式碼的方式建立控制元件,那麼在建立時一定會呼叫initWithFrame:方法;如果使用xib/storyboard方式建立控制元件,那麼在建立時一定會呼叫initWithCoder:方法。
  2. 在initWithCoder:裡面訪問屬性,比如self.button,會發現它是nil的,因為此時自定義控制元件正在初始化,self.button可能還未賦值(self.button是一個IBOutlet,IBOutlet本質上就相當於Xcode找到這個對應的屬性,然後UIButton button = … , [self.view addSubview: button]這種操作,而這一切的操作都是相當於在MYView view = [[MYView alloc] initWithCoder: nil]方法之後執行的。上面的程式碼就相當於用程式碼的方式實現Xcode在storyboard中載入MYView),所以如果在這個方法中進行初始化操作是可能會失敗的。
所以建議在awakeFromNib方法中進行初始化的額外操作。因為awakeFromNib是在初始化完成後呼叫,所以在這個方法裡面訪問屬性(IBOutlet)就可以保證不為nil。