NIB 文件在运行时不显示

Posted

技术标签:

【中文标题】NIB 文件在运行时不显示【英文标题】:NIB File Doesn't Display at Runtime 【发布时间】:2010-12-07 04:54:19 【问题描述】:

我正在把头发拉出来。我有一个具有两个级别的 TableViews 的 NavigationController。每个 TableView 都在其自己的 NIB 文件中。第一级只是显示一个列表。选择一个单元格后,它会将用户带到具有更详细列表的第二级 TableView。我想在第二级 TableView 上显示一个搜索栏(实际上我也在使用 SearchDisplayController)。我已将其添加到 TableView 中,因为我希望 SearchBar 与表格一起滚动。

下面,我展示了两个屏幕截图。第一个是InterfaceBuidler 中的二级tableview。第二个是运行时的二级tableview。由于某种原因,SearchBar 在运行时不显示。

我尝试从头开始创建一个全新的项目,但同样的事情发生了。我不明白为什么 SearchBar 不显示在 NavigationController 上推送的 NIB 上。

在您问之前,如果我将 SearchBar 放在第一级 TableView 上,它会显示得很好。是的,我将它添加到 TableView 本身,所以它是应该显示的视图的一部分。

帮助!我做错了什么?

这是推送 XIB 后实际显示的内容...

【问题讨论】:

【参考方案1】:

好的,我将不得不回答我自己的问题。我考虑过删除它,但也许这可以帮助其他人。我真的在这个上拔了头发。与其说我做错了什么,不如说是对 iPhone 开发的工作原理存在根本性的误解。

简而言之,问题出在这行代码上,它实例化了 TableViewController:

self.downloadDetailViewController = [[DownloadDetailTableViewController alloc] initWithStyle:UITableViewStyleGrouped];

当你使用 XCode 创建一个新类时,你可以使用如下:

“添加 -> 新建文件 -> Cocoa Touch 类 -> UIViewController 子类 -> UITableViewController 子类 AND 使用 XIB 作为用户界面"

问题在于,在您告诉代码使用它之前,NIB 与 UITableViewController 完全无关。对我来说,这似乎是 XCode 中的一个错误,或者至少是违反直觉的东西。当开发环境一起创建所有三个文件时,只有它们可以一起工作才有意义,但事实并非如此。

相反,解决方法是修改这行代码如下:

self.downloadDetailViewController = [[DownloadDetailTableViewController alloc] initWithNibName:@"SecondaryView" bundle:[NSBundle mainBundle]];

希望这可以帮助其他人......

【讨论】:

【参考方案2】:

您还可以在 Tab Bar Controller 下的 Download View Controller 上设置 Nib Name 属性,事实上,再加上使用您的类名设置类将自动为您创建视图,而您不必手动创建它。

【讨论】:

【参考方案3】:

我认为问题在于您将搜索栏添加到 tableView,所以它没有显示。

尝试在不添加到表视图的情况下添加该搜索栏,这意味着将表视图向下移动一些并将搜索栏添加到视图(而不是表视图)。

【讨论】:

谢谢,但这并不能真正实现我所追求的。我希望 ScrollBar 与 TableView 一起滚动。我已经对此进行了测试,如果 TableView 是 NavigationController 的主视图,它会很好地显示并与 Table 一起滚动。但是由于某种原因,TableView 上的相同设置然后使用 NavigationController 推送到视图上不会显示 SearchBar。

以上是关于NIB 文件在运行时不显示的主要内容,如果未能解决你的问题,请参考以下文章

MFC EditBrowse 控件在运行时不显示文件夹图标

.nib 文件中未显示按钮

UIView 在加载 NIB 文件后立即显示?

如何根据条件显示或不显示 NIB 创建的视图

从 nib 文件加载 UIView?

运行时不显示图像