Ios 在Xcode 10中添加自定义UITableViewController标头

Ios 在Xcode 10中添加自定义UITableViewController标头,ios,objective-c,ipad,Ios,Objective C,Ipad,我正在关注iOS编程的第四版《大书呆子牧场指南》。我使用的是Xcode 10.0,而这本书使用的是Xcode 5.0,我已经部署到运行iOS 11.0的第六代iPad上。在第9章中,我尝试为UITableViewController派生类ItemsViewController添加自定义标题视图 我创建了一个名为HeaderView.xib的空用户界面文件。在该文件中,我使用界面生成器中的两个按钮创建了一个UIView。我将文件的所有者类类型设置为ItemsViewController。我将Hea

我正在关注iOS编程的第四版《大书呆子牧场指南》。我使用的是Xcode 10.0,而这本书使用的是Xcode 5.0,我已经部署到运行iOS 11.0的第六代iPad上。在第9章中,我尝试为
UITableViewController
派生类
ItemsViewController
添加自定义标题视图

我创建了一个名为
HeaderView.xib
的空用户界面文件。在该文件中,我使用界面生成器中的两个按钮创建了一个
UIView
。我将文件的所有者类类型设置为
ItemsViewController
。我将
HeaderView
UIView
大小更改为Freeform,并将视图的大小调整为按钮的大小。我将
HeaderView
的背景色设置为清除。我还将文件的所有者视图连接到interface builder中的
UIView

在ItemsViewController内部,我添加了一个
IBOutlet UIView*
属性,将
HeaderView
连接到
ItemsViewController
。我编写了
-(UIView*)headerView
实例方法来加载header视图包

- (UIView*)headerView
{
    if (!_headerView)
    {
        [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
    }

    return _headerView;
}
然后在
viewDidLoad
中设置标题视图

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];

    UIView* header = self.headerView;
    [self.tableView setTableHeaderView:header];
}
当我部署和运行应用程序时,我会看到一个带有我添加的两个按钮的黑屏。如果我删除了
viewDidLoad
的最后两行,那么应用程序将使用我创建的一些虚拟数据进行良好加载

为什么
HeaderView
会覆盖所有
ItemsViewController
显示选项并显示黑屏?

这就是问题所在

我还将文件的所有者视图连接到interface builder中的UIView


由于文件所有者是您的视图控制器,因此您将覆盖作为表的现有视图。这就是为什么你只看到标题而没有表格。您需要定义另一个变量,它是一个
IBOutlet
,并将标题链接到该变量。

如果您使用的是基于Xcode 5的指南,您真的应该找到一个更新的教程。很多东西都变了。我之所以这么做,是因为我的工作中有需要维护的应用程序,这些都是我得到的资料。所以,我要用我所拥有的一切。是的,是的,是的。你说得对。我创建了outlet属性,但我连接到了现有视图,而不是我创建的属性。新手犯的错误。非常感谢。