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

Posted

技术标签:

【中文标题】在 Xcode 10 中添加自定义 UITableViewController 标头【英文标题】:Adding a custom UITableViewController Header in Xcode 10 【发布时间】:2019-04-08 20:06:50 【问题描述】:

我正在关注第 4 版 ios 编程,大书呆子牧场指南。我使用的是 Xcode 10.0,而本书使用的是 Xcode 5.0,并且我一直在部署到运行 iOS 11.0 的第 6 代 iPad。我在第 9 章,我正在尝试为 UITableViewController 派生类 ItemsViewController 添加自定义标题视图。

我创建了一个名为HeaderView.xib 的空用户界面文件。在该文件中,我创建了一个UIView,其中包含来自界面构建器的两个按钮。我将 File's Owner 类类型设置为ItemsViewController。我将HeaderViewUIView 大小更改为Freeform,并将视图大小调整为按钮的大小。我将HeaderView 的背景颜色设置为清除。我还将文件所有者视图连接到界面生成器中的UIView

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

- (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 显示选项并显示黑屏?

【问题讨论】:

如果您使用的是基于 Xcode 5 的指南,您确实应该找到更新的教程。很多东西都变了。 我这样做是因为我的工作有需要维护的应用程序,这些是我提供的材料。所以,我正在尽我所能。 【参考方案1】:

这就是问题

我还将文件的所有者视图连接到界面构建器中的 UIView。

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

【讨论】:

是的,是的,是的。你是对的。我创建了 outlet 属性,但我连接到现有视图,而不是我创建的属性。菜鸟失误。谢谢。

以上是关于在 Xcode 10 中添加自定义 UITableViewController 标头的主要内容,如果未能解决你的问题,请参考以下文章

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

无法在 Mac 应用程序中添加自定义字体(OSX 10.9+ Xcode5+)

如何在已经是 NIB 的 UICollectionViewCell 中加载带有自定义单元格的 UITable

目标 C:如果将标签添加到单元格,则 UITable 方法“didSelectRowAtIndexPath”不起作用

UITable 视图界面构建器创建

在 Xcode 中添加自定义云容器 id 的位置(不使用开发者帐户)