目标 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 (@"%@", mTabBarVC) ? 和 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 中使用委托