如何将UINavigationController的外观和功能推迟到子UIViewController

时间:2019-07-09 12:04:04

标签: ios swift uinavigationcontroller uinavigationitem uicontainerview

我正在为UIViewControllers构建包装器,它为我的控制器添加了som增强功能。 这些包装好的ViewController将被推入UINavtigationController的导航堆栈中。可以在包装时或不包装时推动控制器。

设置的MVP如下

enter image description here

问题是UINavigationController始终使用最近的子对象来控制诸如title,navigationItem等之类的事实。我想将这个功能推迟给孩子,让孩子不要意识到这一点。

通过在包装器中添加title = child.title之类的内容可以轻松完成标题的固定。 navigationController?会从子视图/ contentView自身访问navigationController,也很容易,因为它会找到第一个NavigationController。

但是,在添加导航项时,我遇到了问题。我不能将navigationItem = child.navigationItem设置为只读。

现在我正在执行此操作,这感觉像是一种hack,绝对不符合我对contentView不知道被包裹的要求。

let viewController = parent?.parent as? WrapperViewController ?? self 

viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "push me", style: .plain, target: nil, action: nil)

如何做到这一点的可靠实现,“发挥作用”,而不必考虑每次实现新视图时都包装viewController的可能性,换句话说,如何将所有导航内容委派给包装器的子视图?

0 个答案:

没有答案