我不理解nib文件与将文件所有者设置为viewcontroller子类的作用。如果我将nib的文件所有者设置为我的子类,那么当我实例子类时,nib似乎加载了它的所有子视图。我为什么需要initWithNib?
在另一种情况下,我注意到当我在nib中创建一个表视图,在表视图中添加一个搜索栏,并将文件所有者设置为uitableviewcontroller的子类时,搜索栏将不会显示,除非我使用initWithNib。为什么在这种情况下我需要initWithNib,而在前一种情况下我不需要呢?
发布于 2011-03-16 05:27:33
我很难理解你的问题。
-initWithNibName:bundle:是UIViewController的指定初始值设定项。如果需要,可以为nib名称和包传递nil,在这种情况下,默认行为是查找与应用程序包中的视图控制器子类同名的.xib文件。因此,具有相同名称的视图控制器和.xib并不少见,只需传递nil作为名称和包。但是,您可以有几个不同的nib,它们都可以使用相同的视图控制器子类。例如,你可能有一个笔尖是纵向的,另一个是横向的,你可以根据设备的方向决定使用哪一个。
文件的所有者是nib中的一个对象,它是加载nib文件的对象的代理。您可以(也应该)设置它的类型,以便Interface Builder知道加载文件的对象可以提供哪些出口和操作,以及可以连接到文件的所有者代理的内容。当应用程序运行时,对象加载了一个nib,该nib中连接到文件所有者的任何对象都将连接到加载文件的对象。这是nib中的对象可以与应用程序的其余部分通信的主要机制。
因此,虽然文件的所有者和-initWithNibName:bundle:在加载nib时都扮演着一个角色,但它们是非常不同的角色,并且大多是正交的。如果您在某些视图控制器上成功调用了-init,并且发现nib已加载,则-init的实现很可能调用-initWithNibName:bundle:并为两个参数都传递nil,如上所述。
https://stackoverflow.com/questions/5318095
复制相似问题