16

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

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

4

2 回答 2

35

事实证明,您可以从任何 UIView/UIViewController 后代中获取它,尽管使用了相当多的点语法。

self.(view).window.rootViewController.navigationController;

如果您使用的是从任何其他类派生的对象,则同样如此,除非您必须通过UIApplication

[UIApplication sharedApplication].keyWindow.rootViewController.navigationController;

当然,这两者都在很大程度上破坏了 MVC,并且绝对建议将任何必须触及“默认导航控制器”的逻辑添加到根视图控制器中。

于 2013-01-25T20:48:27.000 回答
4

斯威夫特 4:

guard let navigationController = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController else { return }
于 2018-04-23T09:57:09.160 回答