嗨,我正在阅读一本我不得不面对这种情况的书。 我创建了一个名为HeaderView.xib.
的XIB文件然后我将这个XIB 文件的File Owner
连接到ItemsViewController
。到目前为止,一切都很好。我还连接了 ItemsViewController的某些插座和XIB上的视图。现在xib文件的设置文件所有者
,在ItemsViewController
我不得不打电话这样的代码:上述
- (UIView *)headerView
{
// If we haven't loaded the headerView yet...
if (!headerView) {
// Load HeaderView.xib
[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
}
return headerView;
}
代码将设置出口的ItemsViewController
点headerView
对XIB文件对应 视图(I与XIB建立的连接的一个文件)。 我的问题是,为什么我必须,两次,指定所有者? (例如,如我在该端口的开始中所提到的那样在XIB中一次,以及在代码中的第二次,例如owner: self
)。
dasblinkenlight,那么让我问你这样的问题。如果我将某些XIB的文件所有者设置为ViewController。然后(在XIB中)将ViewController的View出口连接到XIB文件中的某个视图。那么这就是我必须要做的。我通常不会再像上面那样在代码中进行这种调用。为什么? (是否因为某处自动loadNibNamed在ViewController的视图中被调用?)? – user2054339
@ user2054339隐式加载XIB还有其他方法 - 例如,如果您的视图控制器是使用'initWithNibName'实例化的,则不需要调用'loadNibNamed:'方法。 – dasblinkenlight
@ dasblinkenlight:是的,我测试了它只是添加了一个ViewController。然后是一个XIB文件。将XIB文件的文件所有者设置为我的ViewController。然后,在XIB的视图控制器的XIB连接视图插座中查看我的视图。并且该视图被自动加载,无需再调用loadNibNamed了......我必须在这里调用loadNibNamed,因为它显然是因为它是一个不同的出口......也针对不同的类TableViewController ... – user2054339