2

我有包含一些 UINavigationControllers 的 UITabbarMoreController。这些 UINavigationControllers 然后包含我的自定义视图控制器。

所以层次结构看起来像这样:

UITabbarController
 - UINavigationController
  -> my custom UIViewController
 - ...(other children of UITabbarController look the same)

从我的自定义视图控制器中,我调用[self parentViewController]它应该返回一个 UINavigationController。这确实发生了,我确实得到了一个 UINavigationController,但只有当特定的 UINavigationController 不在 moreNavigationController 中时。

由于我在 tabbar 控制器中有很多子控制器,所以 tabbar 控制器创建了一个 moreNavigationController。如果我打开 moreNavigationController 下的视图控制器并调用[self parentViewController]它,则会返回一个带有 UIMoreNavigationController 类的神秘对象

我真的需要获取作为我的视图控制器的父级的 UINavigationController,而不是 UIMoreNavigationController。另外,我尝试使用[self navigationController]相同的结果。如何获得对我的视图控制器真正最近的父级的引用?提前感谢您的帮助!

4

1 回答 1

4

简而言之,你不能。

苹果总是试图优化他们的代码。他们在这里的优化之一是检查ViewController其列表中显示的是否UIMoreNavigationController是 type UINavigationController。因为UIMoreNavigationController它本身是一个 UINavigationController 它不想创建另一个UINavigationController。它试图避免UINavigationController嵌套。

当您查看UIMoreNavigationController的头文件时,您会注意到它有一个变量 ,该变量是您创建的并且您想要访问UINavigationController* _originalNavigationController;的原始变量。UINavigationController不幸的是你不能因为UIMoreNavigationController是私人的。

解决方法(丑陋)

当您将 NavigationController 的引用推送到它的堆栈时,将它们传递给它的子级。

于 2012-08-15T09:43:49.653 回答