假设我有一个容器控制器,它接受 UIViewControllers 数组并将它们布置好,以便用户可以左右滑动以在它们之间切换。这个容器控制器被包裹在一个导航控制器中,并成为应用程序主窗口的根视图控制器。
每个子控制器向 API 发出请求并加载显示在表格视图中的项目列表。根据显示的项目,可以将按钮添加到导航栏,允许用户对表格视图中的所有项目进行操作。
因为 UINavigationController 只使用其子视图控制器的 UINavigationItems,所以容器控制器需要更新其 UINavigationItem 以与其子视图控制器的 UINavigationItem 同步。
容器控制器似乎需要处理两种情况:
- 容器控制器的选定视图控制器发生变化,因此容器控制器的 UINavigationItem 应该更新自身以模仿选定视图控制器的 UINavigationItem。
- 子控制器更新其 UINavigationItem 并且容器控制器必须知道更改并更新其 UINavigationItem 以匹配。
我想出的最佳解决方案是:
- 在 setSelectedViewController: 方法中查询被选视图控制器的导航项,并更新容器控制器的 UINavigationItem 的 leftBarButtonItems、rightBarButtonItems 和 title 属性与被选视图控制器的 UINavigationItem 相同。
- 在 setSelectedViewController 方法 KVO 中,选择视图控制器的 UINavigationItem 的 leftBarButtonItems、rightBarButtonItems 和 title 属性,并且每当这些属性之一更改容器控制器的 UINavigationItem 时。
对于我编写的许多容器控制器来说,这是一个反复出现的问题,我似乎找不到任何记录在案的这些问题的解决方案。
人们针对这个问题找到了哪些解决方案?