UITavigationBar里面的UINavigationBar

时间:2014-01-03 16:46:27

标签: ios objective-c uitableview

我想要显示一些静态单元格,所以我有一个UITableViewController。此场景中还有一个NavigationBar,顶部包含一些按钮。设置如下:

UITableViewController setup

如果我有一个包含UITableView的UIViewController,则设置如下:

UIViewController setup

所以,问题是:

  • 使用UITableViewController时,为什么导航栏必须嵌入UITableView中? (我试过把它放在别的地方,但IB不会让我)
  • 我知道UITableView是UIView的子类,但是层次结构中的顶级元素不是View(而是TableView)可以吗?

感谢。

3 个答案:

答案 0 :(得分:2)

您不应该将UINavigationBar放在UITableView中。您应该将UITableViewController放在UINavigationController中,因为这会为您提供UINavigationBar

因此,如果您在故事板中选择UITableViewController,则可以选择嵌入 - >编辑器菜单中的导航控制器。这将是正确的方法。

答案 1 :(得分:1)

UITableViewController的工作方式是它的根视图是UITableView。所以没有办法将UINavigationBar放在UITableView以外的任何地方。

我倾向于永远不会使用UITableViewController,因为它并没有给你带来太多。

如果你特别想使用UITableViewController,我不相信在桌面视图中有导航栏有任何实际问题。您只需确保在表视图上设置contentInset,以便导航栏不会阻止内容。虽然这样做似乎有点落后。

我的建议是使用带有导航栏和表格视图的普通UIViewController。

如果您确实需要功能导航,则需要将UITableViewController放在UINavigationController中。

希望这会有所帮助:)

如果还有什么不清楚,请告诉我。

答案 2 :(得分:1)

在iOS中使用UINavigationBar有两种方法:

  • 嵌入UINavigationController(推荐)
  • 作为独立对象

针对您的具体情况,我建议您将UITableViewController作为rootViewController的{​​{1}}。这样您就可以自动获得导航栏,您可以根据需要自定义导航栏。在典型的用户体验中,当您点击一些表视图行时,新的视图控制器将被推送到导航堆栈,因此您可能最终还是需要导航控制器。

如果您决定将导航栏用作独立对象,该怎么办?这非常好,您可以在视图层次结构中将其用作普通UINavigationController,但是您需要创建另一个实现UIView协议的对象并将其设置为UINavigationBarDelegate导航栏的属性。如果您使用delegate,则已为您设置和配置委托。您还需要使用UINavigationControllerUINavigationItem方法在导航栏中添加/删除导航项(pushNavigationItem:animated:的实例)。

关于您在视图层次结构上的问题,您可以在需要popNavigationItemAnimated:的任何地方使用UITableView。唯一需要注意的是UIView本身就是一个视图层次结构,这可能会限制你的布局。