我已经在UINavigationController的视图控制器层次结构中创建了一个视图控制器。此视图控制器包含一个全帧容器视图,用于显示子视图控制器的视图。
理想情况下,我希望显示与子视图控制器的导航项(是title
和rightBarButtonItems
)相关联的项目,而不是视图控制器的导航项目包含容器视图。
我最初的反应只是设置viewController.navigationItem = childViewController.navigationItem
,但navigationItem
是只读的。我的第二反应是自己设置相关项目,例如:
viewController.navigationItem.title = childViewController.navigationItem.title;
viewController.navigationItem.rightBarButtonItems = childViewController.navigationItem.rightBarButtonItems;
通过调配,我还能够检测到子视图控制器的导航项属性何时被设置并相应地更新。但是,如果子视图控制器的导航项属性未经替换而更新(例如,title
更改文本颜色,rightBarButtonItem
被禁用),则不会反映这些更改。 / p>
有没有办法达到我想要的效果?
答案 0 :(得分:0)
您好先生而不是设置childviewcontroller导航项,您可以设置parentviewcontroller的导航项。
我的意思是说在加载子视图控制器之前,如果你知道childviewcontroller的navigatio bar项值,你可以设置parentviewcontroller的导航栏Item。
如果您的子视图控制器在容器内,我还有一个问题,它是如何拥有自己的导航栏,因为它可以滚动,所以最好在加载子视图控制器之前设置父视图控制器的导航栏。
答案 1 :(得分:0)
原来我的问题出在其他地方,而且我的问题中概述的方法可以正常运行。 X_X
为了使这个答案更有用,以下是我的方法的更多细节:
-[setTitle:]
和-[setRightBarButtonItems:]
进行了调整。混合方法只需分别发布自定义NSNotifications UINavigationItemTitleDidChange
和UINavigationItemRightBarButtonItemsDidChange
。-[prepareForSegue:sender:]
中,我提取了我的嵌入segue的目标视图控制器,并将其存储在我的视图控制器上的自定义属性childViewController
中。childViewController
的setter中,我使用我的子视图控制器的导航项作为对象,将观察者添加到我的自定义UINavigationItem通知中。我自己的修复中的“其他地方”是我的孩子视图控制器在我认为它没有更新其右边的按钮项时,所以看起来好像视图控制器呈现它没有获得其右边的按钮项目