保持导航控制器的状态并且只改变视图
Posted
技术标签:
【中文标题】保持导航控制器的状态并且只改变视图【英文标题】:Keep state of navigation controller and only change view 【发布时间】:2016-07-08 02:21:13 【问题描述】:我有一个带有下拉菜单的应用程序,作为我的NavigationController
的titleView
。当用户选择下拉菜单中的一项时,整个视图应该切换内容,但是,NavigationBar
应该保持不变。 NavigationBar 不应重新加载任何数据,而 titleView 应保持下拉菜单。
打开应用时的原始视图:
触摸下拉菜单时的视图:
我目前看到了几种解决方法:
为每个选项设置一个UIViewController
,执行segue,然后重新加载数据。
ViewController
设置一个 segue 标识符,这意味着如果我的下拉菜单中有 15 个选项,我将有 210 个 segue 标识符。我还必须重新加载我所有的 NavigationBar
数据。
为什么这样好:我将有一个清晰的区域来设置每个单独的视图。
根据需要以编程方式添加和删除 UIButtons
、UILabels
和 UIWhatevers
。
ViewController
中创建大量代码,并且可能难以调试。
为什么这很好:NavigationBar
永远不会被重新加载。
添加一个容器并根据需要为每个项目嵌入一个唯一的ViewController
。
ViewController
中,我必须在一个控制器中管理嵌入式 ViewController
的逻辑。
为什么这很好:NavigationBar
永远不会重新加载。
其他人建议的完全不同的方法,因为我不知道最有效的方法。
因此,总而言之,在切换 View
中的主要内容时,保持 NavigationBar
状态的最有效方法是什么?
【问题讨论】:
这个 UINavigationController 是你应用程序的根视图吗? (基本上是一个 UITabBarController,顶部有一个下拉菜单,而不是底部的 UITabBar) 是的 NavigationController 是根视图。 选项 3。我不明白它为什么会变得复杂。根视图控制器只负责切换容器视图中的视图控制器。每个包含的视图控制器仍然是自包含的 【参考方案1】:选项 3 是您列出的三个中最好的。您要添加的视图控制器越多,选项 1 和 2 将变得越来越复杂。与 UINavigationController
、UITabBarController
或 UIPageViewController
相比,它们不需要更复杂即可处理 10 个屏幕和 100 个屏幕。
我建议创建一个自定义容器视图控制器 (Apple's Reference)
我看到了 2 种直接的方法来实现这一点:
-
子类化
UIViewController
- 这就是 Apple 的容器视图控制器的实现方式
子类 UITabBarController
- 我已成功完成此操作,子类 UITabBarController
以在顶部而不是底部显示自定义标签栏。
【讨论】:
以上是关于保持导航控制器的状态并且只改变视图的主要内容,如果未能解决你的问题,请参考以下文章