目标 C:如何从当前 ViewController 后面的 ViewController 获取导航控制器

Posted

技术标签:

【中文标题】目标 C:如何从当前 ViewController 后面的 ViewController 获取导航控制器【英文标题】:Objective C: How to get navigation controller from ViewController behind my current ViewController 【发布时间】:2016-07-11 18:27:51 【问题描述】:

我有带有导航控制器的 ViewController 1,我想在其中推送其他一些 VC。但是我有 ViewController 2 在它上面而不是在导航控制器层次结构中。

在 ViewController 2 中,我有一些方法可以将其最小化,但我无法到达 ViewController 1 中的导航控制器以将其他 VC 推到那里。我试图用代码从窗口中做到这一点:

UITabBarController *mTabBarVC = (UITabBarController *) [UIApplication sharedApplication].keyWindow.rootViewController;
UINavigationController *prevNavigationController = myTabBarVC.selectedViewController.navigationController;

但我没有成功,我在 prevNavigationController 中得到了 nil。

【问题讨论】:

什么显示 NSLog (@"%@", mTab​​BarVC) ? 和 NSLog (@"%@", myTabBarVC.selectedViewController) ? 检查,如果keyWindow.rootViewController真的是UITabBarController,而不是另一个控制器 如何在 ViewController 1 上呈现 ViewController 2?模态,还是通过添加子视图? 【参考方案1】:

在 ViewController 2.h 中创建:

@property UIViewController *parent;

在 ViewController 1 中传递自我:

viewController2.parent = self;

在 ViewController 2 中,您现在可以获得 UINavigationController:

UINavigationController *navVC = self.parent.navigationController;

这是最好的方法,因为您将来可以更改视图控制器的结构并且会遇到错误。

如果 ViewController 2 以模态方式存在于 ViewController 1 上,您可以在 self.presentingViewController 属性中从 VC2 获取 VC1。

【讨论】:

以上是关于目标 C:如何从当前 ViewController 后面的 ViewController 获取导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

(目标:对象)不适用于从 viewController 外部设置 UIButton

如何在目标 C 和 swift Viewcontroller 中使用委托

如何从 Sprite Kit 场景中引用当前的 Viewcontroller

如何从目标C中的数组中获取当前字符串值

如何检查目标 C 屏幕上当前显示的子视图?

如何在目标 c 中的按钮 Segue 后导航回来