如何在不使用 NavigationController 的情况下为 TableView 添加 NavigationBar 和 SearchBar

10
我觉得这不应该是一个很大的问题,而且我可能漏掉了什么,但我似乎无法让它正常工作。我想要一个选项卡(TabBar),在三个不同的TableView之间切换。它们都需要一个NavigationBar,但不需要 NavigationController(因为这是在初始模态弹出(modal segue)进入 TabBarController之后发生的)。我想要的完美例子就是苹果地图收藏夹。
我尝试了三种不同的方法,但它们都以不同的方式失败:
  1. 添加一个 TableView,然后添加一个 NavBar,再添加一个 SearchBar。SearchBar只是取代了 NavBar。
  2. 添加一个 View,然后将 NavBar 添加到此视图中。然后将 TableView 添加为子视图。当我将 SearchBar 添加到此子视图中时,它最终出现在原型单元格下面(我没有尝试运行它,因为我必须编写一个新的 ViewController 来处理 TableView 现在是子视图的事实,鉴于布局问题,我认为这还不值得)。
  3. 添加一个 View,然后将 NavBar 添加到此视图中。然后添加一个 ContainerView,其中有一个 TableViewController。这只会在运行时崩溃。我不确定错误在哪里,因为我不太确定在哪里捕捉任何异常……
到目前为止,我已经在 IB 中实现了大部分界面,并希望尽可能保持这种方式,但我肯定有些显而易见的东西被忽略了。我没做多长时间的 iOS 编程,所以如果我漏掉了一些基本的东西,请轻点。非常感谢您提供的帮助。即使是建议我应该选择哪种方法并继续尝试也可以。谢谢! 编辑 我应该提及的是,当我说 TableViewController 时,我指的是一个自定义的 TableViewController 子类,它使用 FetchedResultsController 来填充单元格。

在xib中添加导航栏和搜索栏。 - Darshan Kunjadiya
不幸的是,我最终遇到了与第3个相同的未知崩溃。即使使用多个断点、尝试和捕获等方法,我也无法弄清楚它是什么。当通过推送访问tabBarController时,tableView可以正常加载,只有在模态segue中才会出现这个问题。 - GraemeArthur
2个回答

10

如果你要用模态Segue到一个新的视图控制器(或者是有指向导航控制器的选项卡栏控制器),并且你希望该视图控制器有一个导航栏,那么你应该选择要以模态方式呈现的视图控制器,将其嵌入到一个导航控制器中(Editor->Embed In->Navigation Controller),然后再以模态方式Segue到导航控制器。对于选项卡栏控制器,相同的概念适用,只不过它们是关系Segue。 显示具有导航栏的模态Segue图像


很棒的答案。这是一个非常棒的解决方案,可以使用Storyboard。 - dustinrwh

2

您应该为UIViewController(而不是table view controller)添加一个导航栏,然后添加表视图,再向该表视图添加搜索栏和单元格。我已经测试过这个方法,它可以正常工作。


抱歉,我编辑了原问题并指出这是一个自定义的TableViewController子类,所以我不确定这个解决方案是否会对我有所帮助。目前为止,我已经将NavigationController与TVC作为根视图弹出来使其正常工作,但感觉不太对! - GraemeArthur
2
如果您使用TVC,那可能是唯一的方法,因为您添加的任何视图都会添加到表视图中。如果您想在表视图之外添加视图,则需要使用UIViewController。 - rdelmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接