如何获取当前UINavigationController的引用?

Joh*_*ler 15 cocoa objective-c

在Objective-C中,获取对当前UINavigationController的引用的最佳方法是什么?我想从任何可能没有引用UIController,委托或其他任何类的类中获取它.

是否有现有的方法来获取当前的UINavigationController?我应该向我的应用程序委托添加一些内容,并检索它吗?

Cod*_*aFi 33

事实证明,你可以从任何UIView/UIViewController后代获得它,尽管有相当多的点语法.

self.(view).window.rootViewController.navigationController;
Run Code Online (Sandbox Code Playgroud)

如果您使用的是从任何其他类继承的对象,则情况也是如此,除非您必须通过 UIApplication

[UIApplication sharedApplication].keyWindow.rootViewController.navigationController;
Run Code Online (Sandbox Code Playgroud)

当然,这两者都会大大打破MVC,并且绝对建议将必须触摸"默认导航控制器"的任何逻辑添加到根视图控制器中.

  • 我在我的tvOS应用程序中尝试了这一点,发现`[UIApplication sharedApplication] .keyWindow.rootViewController`给了我一个完全可用的UINavigationController.另一方面`[UIApplication sharedApplication] .keyWindow.rootViewController.navigationController`返回nil!因此,如果您的根视图是UINavigationController,您可能需要稍微调整一下. (7认同)