iOS 使用nib檔案(二)

2021-07-04 08:46:13 字數 1557 閱讀 2246

接著 ios 使用nib檔案(一)來。

在testnibview.m中有個方法

-(id)initwithcoder:(nscoder *)adecoder;

這個方法來自nscoding協議。nscoding協議如下,就兩個方法。

@protocol nscoding

- (void)encodewithcoder:(nscoder *)acoder;

- (id)initwithcoder:(nscoder *)adecoder; // ns_designated_initializer

@end

nib檔案能夠儲存和恢復物件就需要用到這兩個方法。我們在需要歸檔自己自定義的物件時,也會實現這兩個方法。 對於uiview(包括子類)和uiviewcontroller(包括子類)系統都已經實現了這兩個方法。使用xib檔案例項化物件時,首先

- (nsarray *)loadnibnamed:(nsstring *)name owner:(id)owner options:(nsdictionary *)options;

會被呼叫,接著,系統就會呼叫initwithcoder來例項化實現了nscoding協議的物件,而沒有實現nscoding協議的物件,會呼叫其init方法。按照文件描述,initwithcoder只是loadnibnamed方法中的一部分。

在ios 使用nib檔案(一)中說道testnibview中的乙個方法

+(instancetype)testnibview  

這種使用了單獨的xib檔案的view只能通過**去使用,而沒有辦法在其他的xib中使用。假設在a.xib中,我們拖拽了乙個uiview叫做view,將其class設定為testnibview,這個時候,和testnibview類關聯的xib就不是testnibview.xib,而是a.xib中view,我們可以在view上加乙個按鈕,這個按鈕可以作為outlet和testnibview的button關聯起來。這樣就沒有辦法利用已經定義好的xib。

需要注意的是initwithcoder方法只是乙個init方法,它只是確保init,至於outlet這些關聯在這個方法並沒有完成關係,這一步,列印self.button是nil。loadnibnamed還會在initwithcoder之後呼叫awakefromnib。而到了awakefromnib方法中,這些outlets、delegate才確保已全部關聯,這個方法中[super awakefromnib]後列印self.button不為空。一般來說,我們並不需要在awakefromnib中做些什麼,除了那些沒有辦法在xib中設定的東西,過載記得呼叫[super awakefromnib]。

還要注意tableview的registerclass和registernib的區別。前者呼叫initwithstyle...,不會呼叫awakefromnib,後者不會呼叫initwithstyle...但是會呼叫awakefromnib。一般前者用於**建立的cell,而後者用於使用了xib建立的cell。在initwithstyle裡面使用loadnibnamed:載入xib並沒有什麼意義,還不如直接registernib。

什麼是Nib檔案

nib檔案是一種特殊型別的資源檔案,它用於儲存iphone os或mac os x應用程式的使用者介面。nib檔案是inte ce builder文件。通常您會使用inte ce builder設計應用程式的可視部分 例如視窗或檢視。有些時候,您可能也用它來配置一些不可視的物件,例如控制器物件 用於...

什麼是nib檔案

nib檔案是一種特殊型別的資源檔案,它用於儲存iphone os或mac os x應用程式的使用者介面。nib檔案是inte ce builder文件。通常您會使用inte ce builder設計應用程式的可視部分 例如視窗或檢視。有些時候,您可能也用它來配置一些不可視的物件,例如控制器物件 用於...

什麼是Nib檔案

nib檔案是一種特殊型別的資源檔案,它用於儲存iphone os或mac os x應用程式的使用者介面。nib檔案是inte ce builder文件。通常您會使用inte ce builder設計應用程式的可視部分 例如視窗或檢視。有些時候,您可能也用它來配置一些不可視的物件,例如控制器物件 用於...