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 に答える