需要检查的几件事:
myTableHeaderView 也必须是 IBOutlet 或在您的 Class 中某处的代码中创建
当您尝试将 self.myTableHeaderView 添加为表头视图时,它不能为 nil。如果它是 nil,那么你没有正确连接你的插座
如果你已经在自己的 .xib 文件中设计了 IB 中的表视图标题,那么你必须在某个地方调用它(viewDidLoad 是个好地方):
[[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil];
MyTableViewHeader.xib 的 File's Owner 必须是您的 TableViewController 子类,并且您必须将 myTableHeaderView 对象连接到 File's Owner 的相应出口。
编辑:回答“[[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil];”做什么?
这一行包含了让您大开眼界的魔力,让您了解 XIB 文件和 Objective-C 对象如何在 Cocoa(触摸)中协同工作,将您的 iOS 编程功夫提升到全新的水平。有两类 Cocoa 程序员,一种是了解它的作用并从中受益的人,另一种是不知道自己缺少什么的人,而是在荒野中跌跌撞撞地尝试为他们的对象创建 XIB 文件和永远无法让它发挥作用。
有了这么大的积累,下面是详细信息:
XIB (NIB) 文件是归档的 Objective-C 对象的集合(以及对实际上不在 XIB 中的对象的引用,例如“文件所有者”,即所谓的“代理对象”)以及这些对象之间的连接。当加载 XIB 文件时,这些归档对象会以它们保存到 XIB 中的状态恢复,然后这些活动对象(和“代理对象”)之间的连接是根据到XIB文件中记录的连接。
例如,在您的标准 UIViewController 子类 .xib 文件中,您将 File's Owner 设置为您的 MyViewController 类。 .xib 内部是一个 UIView 对象,它本身通常包含其他 UIKit 对象。 UIViewController 类的“视图”出口设置为指向 .xib 中的 UIView 对象。当这个 .xib 文件被加载时,UIView 对象被取消归档并成为一个活的 UIView 对象,所有的属性和设置都记录在 .xib 中。这就是“解档部分”。
然后,由于 .xib 中从文件所有者(MyViewController 类)到 UIView 对象的连接,指向这个新 UIView 对象的指针存储在您的“视图”字段中MyViewController 实例。 .xib 文件中还存在的任何其他连接,如 UILabel、UIButton 操作等,也会设置到 MyViewController 中的任何其他“IBOutlet”字段。
这一切似乎都像魔术一样发生在
(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
当你初始化一个新的 UIViewController 子类时的方法。
现在好的部分:您可以自己将 nib 文件与对象关联起来!您可以使用loadNibNamed:owner:options 方法将任何 .xib 文件与您想要的任何对象中匹配的 nil IBOutlets 集相关联!!!
突然之间,创建完全自定义的表格视图单元格、表格页眉、页脚等等变得轻而易举,您可以轻松编写模块化的可重用 UIView 组件等,所有这些都在 Interface Builder 中布局。
您想用从 .xib 文件加载的对象填充其 nil IBOutlets 的对象是“所有者”对象。通常(但我不确定这是绝对必需的,any 具有相同类型和命名的 IBOutlets 设置为 File's Owner 的类可以工作),这是将被指定为“File's Owner”的类在xib中。
好的,现在你已经有了 nil IBOutlets 的现有所有者对象(IBOutlets 必须为 nil 否则它们不会被更改,这是将 XIB 加载到所有者对象中的“规则”。一些 IBOutlets 是可以的不是零,当您加载 XIB 文件时它们不会被更改,通常这就是您想要的),并且您已经获得了包含要加载到所有者对象中的对象的 .xib 文件。你打电话:
[[NSBundle mainBundle] loadNibNamed:@"MyXIBFileToLoad" owner:theOwner options:nil];
.. 瞧!现在“theOwner”中任何与 MyXIBFileToLoad.xib 中的对象相连的 nil IBOutlets 都已设置为从 XIB 文件加载的新对象。
(此外,此方法返回一个包含所有未从 xib 归档的对象的数组。如果您不关心设置任何所有者的出口,您可以按类和标签在此列表中搜索您的对象)。
故事就是这样,现在开始疯狂地使用新方法将 Objective-C 类与存储在 XIB 文件中的对象关联起来!