在 Xcode 10 中添加自定义 UITableViewController Header
Adding a custom UITableViewController Header in Xcode 10
我正在关注 iOS 编程大书呆子牧场指南第 4 版。我使用的是 Xcode 10.0,而本书使用的是 Xcode 5.0,我一直在部署到第 6 代 iPad 运行ning iOS 11.0。我在第 9 章,我正在尝试为 UITableViewController
派生的 class、ItemsViewController
.
添加自定义 header 视图
我创建了一个名为 HeaderView.xib
的空用户界面文件。在该文件中,我创建了一个 UIView
,其中包含来自界面构建器的两个按钮。我将文件所有者 class 类型设置为 ItemsViewController
。我将 HeaderView
的 UIView
大小更改为自由格式,并将视图的大小调整为按钮的大小。我将 HeaderView
的背景颜色设置为清除。我还将文件所有者视图连接到界面生成器中的 UIView
。
在 ItemsViewController 内部,我添加了一个 IBOutlet UIView*
属性 以将 HeaderView
连接到 ItemsViewController
。我编写了 - (UIView*)headerView
实例方法来加载 header 视图包。
- (UIView*)headerView
{
if (!_headerView)
{
[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
}
return _headerView;
}
然后在 viewDidLoad
中设置 header 视图。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
UIView* header = self.headerView;
[self.tableView setTableHeaderView:header];
}
当我部署和 运行 应用程序时,出现黑屏并显示我添加的两个按钮。如果我删除了 viewDidLoad
的最后两行,应用程序可以正常加载我制作的一些虚拟数据。
为什么 HeaderView
会覆盖所有 ItemsViewController
显示选项并显示黑屏?
这就是问题所在
I have also connected the File's Owner view to the UIView in interface builder.
由于文件所有者是您的视图控制器,因此您将覆盖 table 的现有视图。这就是为什么您只看到 header 而没有看到 table 的原因。您需要定义另一个变量,即 IBOutlet
和 link 而不是 header。
我正在关注 iOS 编程大书呆子牧场指南第 4 版。我使用的是 Xcode 10.0,而本书使用的是 Xcode 5.0,我一直在部署到第 6 代 iPad 运行ning iOS 11.0。我在第 9 章,我正在尝试为 UITableViewController
派生的 class、ItemsViewController
.
我创建了一个名为 HeaderView.xib
的空用户界面文件。在该文件中,我创建了一个 UIView
,其中包含来自界面构建器的两个按钮。我将文件所有者 class 类型设置为 ItemsViewController
。我将 HeaderView
的 UIView
大小更改为自由格式,并将视图的大小调整为按钮的大小。我将 HeaderView
的背景颜色设置为清除。我还将文件所有者视图连接到界面生成器中的 UIView
。
在 ItemsViewController 内部,我添加了一个 IBOutlet UIView*
属性 以将 HeaderView
连接到 ItemsViewController
。我编写了 - (UIView*)headerView
实例方法来加载 header 视图包。
- (UIView*)headerView
{
if (!_headerView)
{
[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];
}
return _headerView;
}
然后在 viewDidLoad
中设置 header 视图。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
UIView* header = self.headerView;
[self.tableView setTableHeaderView:header];
}
当我部署和 运行 应用程序时,出现黑屏并显示我添加的两个按钮。如果我删除了 viewDidLoad
的最后两行,应用程序可以正常加载我制作的一些虚拟数据。
为什么 HeaderView
会覆盖所有 ItemsViewController
显示选项并显示黑屏?
这就是问题所在
I have also connected the File's Owner view to the UIView in interface builder.
由于文件所有者是您的视图控制器,因此您将覆盖 table 的现有视图。这就是为什么您只看到 header 而没有看到 table 的原因。您需要定义另一个变量,即 IBOutlet
和 link 而不是 header。