现在的位置: 首页 > 综合 > 正文

Xib文件使用(二)——关联变量

2013年09月21日 ⁄ 综合 ⁄ 共 1529字 ⁄ 字号 评论关闭

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已经创建了。


抱歉!评论已关闭.