xib檔案設計原則
1 始終用消極式載入設計nib檔案,只用當nib檔案中的這些對象馬上就要使用時,才載入nib檔案。
2 儲存重複的使用者介面組件(例如文件視窗)在單獨的nib檔案。
3 對於偶爾使用的視窗和菜單,存在一個單獨的nib檔案中,通過這樣的方式,將在正真用到它的時候,再將其資源載入到記憶體。
4 使 File’s Owner為nib檔案的單一外界出口。
xib檔案通常與ViewController一同使用,在建立ViewController的時候,可以一同建立與其關聯的Xib檔案,如
然後在RootViewController可以設定IBOutlet(開關變數)和IBAction,最後通過下面的代碼使用。
RootViewController * rvc;rvc= [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
除了上述使用,還有另一種常見的使用:在定義複雜的TableViewCell時。如Apple文檔中的AdvancedTableViewCells(代碼傳送門)。
其RootViewController下有一個TableView的在RootViewController.Xib中,還有一個IndividualSubviewsBasedApplicationCell,如
然後通過這段代碼,將該Cell載入記憶體並使用
self.cellNib = [UINib nibWithNibName:@"IndividualSubviewsBasedApplicationCell" bundle:nil];[self.cellNib instantiateWithOwner:self options:nil];
這時候在RootViewController裡對應的IBOutlet變數tmpCell,便是一個我們設計內容的Cell。
在載入IndividualSubviewsBasedApplicationCell檔案時,我們使用了UINib,其實它才是真正載入nib檔案的類,第一種方法使用RootViewController初始化nib檔案時,只不過是RootViewController幫我們調用了UINib的方法。
這裡跟第一種方法不同的時,開關變數關聯的變數在
IndividualSubviewsBasedApplicationCell.h的檔案中,那麼IndividualSubviewsBasedApplicationCell.h不是Xib檔案的File‘s owner,怎麼也可以這樣關聯呢,關鍵在於
可以看到是TableViewCell的類型,已經改為IndividualSubviewsBasedApplicationCell,這樣便可以關聯Xib檔案中Cell上的內容,看會Xib檔案的源碼
我們接著看該項目的MainWindow.xib,發現檔案左側多了些內容
在iOS xib檔案中,支援放入對象容器,也就是說,可以將任意Objetive-C的對象放入xib檔案中,其由xib建立和銷毀(是一個autorelease對象)。在這個檔案裡,有兩個對象容器,分別放置了AdvancedTableViewCellsAppDelegate和UINavigationController,在先前的版本,經常會這樣使用,這樣程式由MainWindow.xib載入,便有了AdvancedTableViewCellsAppDelegate對象和navigationController對象。在新版的xcode,已不再需要這樣,window和AppDelegate已經建立了。