保持导航控制器的状态,仅更改视图

时间:2016-07-08 02:21:14

标签: ios iphone swift uiviewcontroller

我的应用程序带有下拉菜单,作为titleView的{​​{1}}。当用户选择下拉菜单中的项目时,整个视图应切换内容,但NavigationController应保持不变。 NavigationBar 不应重新加载任何数据,titleView 应保留下拉菜单

打开应用时的原始视图:

Original View

触摸下拉菜单时的视图:

Drop Down Menu

我目前看到了几种解决方法:

  1. 为每个选项设置NavigationBar,执行segue并重新加载数据。

    • 为什么这很糟糕:我必须为每个UIViewController设置一个segue标识符,这意味着如果我的下拉菜单中有15个选项,我将有210个segue标识符四处走动。我还必须重新加载所有ViewController数据。
    • 为什么这很好:我将有一个明确的区域来设置每个单独的视图。
  2. 根据需要以编程方式添加和删除NavigationBarUIButtonsUILabels

    • 为什么这很糟糕:这会在一个UIWhatevers内部创建大量代码,事情可能会变得难以调试。
    • 为什么这样做很好: ViewController永远不会重新加载。
  3. 添加一个容器,并根据需要为每个项目嵌入一个唯一的NavigationBar

    • 为什么这很糟糕:我的所有工作仍然在主ViewController中,我必须在一个控制器内管理嵌入式ViewController的逻辑
    • 为什么这样做很好: ViewController永远不会重新加载。
  4. 其他人提出的完全不同的方法,因为我不知道最有效的方法。

  5. 因此,总之,在NavigationBar中切换主要内容时,保持NavigationBar状态的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

选项3是您列出的三个中最好的。选项1和2将越来越复杂,您想要添加的视图控制器越多。将其与UINavigationControllerUITabBarControllerUIPageViewController进行比较,为了处理10个屏幕而不是100个屏幕,这不需要更复杂。

我建议创建一个自定义容器视图控制器(Apple's Reference

我看到实现这两个方法的直接方法:

  1. 子类化UIViewController - 这就是Apple的容器视图控制器的实现方式
  2. 子类UITabBarController - 我已成功完成此操作,继承UITabBarController以在顶部而非底部显示自定义标签栏。