如何将导航栏(没有 NavigationController)和搜索栏添加到 TableView

Posted

技术标签:

【中文标题】如何将导航栏(没有 NavigationController)和搜索栏添加到 TableView【英文标题】:How to add NavigationBar (without NavigationController) and SearchBar to a TableView 【发布时间】:2013-08-24 12:54:36 【问题描述】:

我觉得这真的不应该给我带来那么多麻烦,而且我错过了一些东西,但我似乎无法让它发挥作用。所以我想要一个在 3 个不同的 TableView 之间切换的 TabBar。它们都需要有一个 NavigationBar 而不是 NavigationController(因为这一切都是在初始模态 segue 进入 TabBarController 之后发生的)。 Apple Maps 书签就是我所追求的完美示例。

我尝试了三种不同的方法,但都以不同的方式失败:

    添加一个 TableView,然后在其中添加一个 NavBar,然后添加 SearchBar。 SearchBar 只是替换了 NavBar。 添加一个视图,然后将导航栏添加到此。然后将 TableView 添加为子视图。当我将 SearchBar 添加到此子视图时,它最终位于原型单元格下方(没有尝试运行它,因为我必须编写一个新的 ViewController 来处理 TableView 现在是子视图并且认为它不值得的事实它只是考虑到布局问题)。 添加一个视图,然后在其中添加一个导航栏。然后添加一个具有 TableViewController 的 ContainerView。这只是在运行时崩溃。我不确定这里的错误是什么,因为我不太确定在哪里捕获任何异常......

到目前为止,我已经在 IB 中实现了我的大部分界面,并希望尽可能地保持这种方式,但我确信这里一定有一些明显的东西我遗漏了。我已经很久没有进行 ios 编程了,所以如果我缺少一些基本的东西,请放轻松!任何帮助将不胜感激。即使只是说我应该采用上述哪种方法并继续尝试。谢谢!

编辑

我应该提到,当我说 TableViewController 时,我指的是 TableViewController 的自定义子类,它使用 FetchedResultsController 来填充单元格。

【问题讨论】:

在 xib 导航栏中添加,在 xib 中添加搜索栏。 不幸的是,我最终得到了与第 3 号相同的未知崩溃。即使有​​多个断点、尝试和捕获等,我也无法弄清楚它是什么。当 tabBarController 时,tableView 加载正常是通过推送访问的,我似乎遇到了这个问题。 【参考方案1】:

如果您要对新视图控制器(或带有指向导航控制器的选项卡的选项卡栏控制器)进行模态搜索,并且希望该视图控制器具有导航栏,那么您应该选择要以模态方式呈现的视图控制器,将其嵌入导航控制器(编辑器->嵌入->导航控制器),然后以模态方式连接到导航控制器。相同的概念适用于您的标签栏控制器,但它们将是关系序列。

【讨论】:

很好的答案。这是能够使用 Storyboard 的绝佳解决方案。【参考方案2】:

您应该向 UIViewController(而不是表格视图控制器)添加导航栏,然后添加表格视图,并在该表格视图中添加搜索栏和单元格。我已经对此进行了测试,并且效果很好。

【讨论】:

抱歉,将原始问题编辑为这样说,但它是 TableViewController 的自定义子类,所以我不知道这个解决方案是否对我有很大帮助。我已经弹出了一个以 TVC 为根的 NavigationController 以使其正常工作,但感觉不对! 如果您使用 TVC,这可能是唯一的方法,因为您添加的任何视图都会添加到表视图中。如果要在表格视图之外添加视图,则需要使用 UIViewController。

以上是关于如何将导航栏(没有 NavigationController)和搜索栏添加到 TableView的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义导航栏链接到导航控制器?

如何将标题设置为 UIPopOverController 导航栏?

模态显示的表格视图没有导航栏

如何在多个页面上重复使用导航栏?

如何将片段目标绑定到底部导航栏中的菜单项?

如何在导航栏顶部添加视图