我有UITabbarMoreController,它包含一些UINavigationControllers。然后,这些UINavigationControllers包含我的自定义视图控制器。
所以层次结构看起来像这样:
UITabbarController
- UINavigationController
-> my custom UIViewController
- ...(other children of UITabbarController look the same)
在我的自定义视图控制器中,我调用[self parentViewController]
,它应该返回一个UINavigationController。这确实发生了,我确实得到了一个UINavigationController,但是只有当特定的UINavigationController不在moreNavigationController中时才会这样。
由于tabbar控制器中有许多子控制器,因此tabbar控制器会创建一个moreNavigationController。如果我打开一个位于moreNavigationController下的viewcontroller并调用[self parentViewController]
它会返回一个带有类UIMoreNavigationController的神秘对象
我真的需要获取UINavigationController,它是我的视图控制器的父节点,而不是UIMoreNavigationController。此外,我尝试使用[self navigationController]
具有相同的结果。如何引用我的viewcontroller最真实的父级?提前感谢您的帮助!
答案 0 :(得分:3)
简而言之,你不能。
Apple总是试图优化他们的代码。其中一项优化是检查ViewController
列表中显示的UIMoreNavigationController
是否为UINavigationController
类型。因为UIMoreNavigationController
本身是一个UINavigationController,所以它不想创建另一个UINavigationController
。它试图避免UINavigationController
嵌套。
当您查看UIMoreNavigationController的标题文件时,您会注意到它有一个变量
UINavigationController* _originalNavigationController;
这是您创建并且想要访问的原始UINavigationController
。不幸的是,因为UIMoreNavigationController
是私人的,所以你不能这么做。
解决方法(丑陋)
当你将NavigationController推送到它的子堆栈时,将它们的引用传递给它们。