Objective-Cで、現在のUINavigationControllerへの参照を取得する最良の方法は何ですか?UIController、デリゲート、またはその他への参照を持たない可能性のあるクラスからアクセスしたいと思います。
現在のUINavigationControllerを取得する既存の方法はありますか?アプリケーションデリゲートに何かを追加して、それを取得する必要がありますか?
Objective-Cで、現在のUINavigationControllerへの参照を取得する最良の方法は何ですか?UIController、デリゲート、またはその他への参照を持たない可能性のあるクラスからアクセスしたいと思います。
現在のUINavigationControllerを取得する既存の方法はありますか?アプリケーションデリゲートに何かを追加して、それを取得する必要がありますか?
結局のところ、かなりのドット構文がありますが、UIView/UIViewControllerの子孫から取得できます。
self.(view).window.rootViewController.navigationController;
他のクラスの子孫であるオブジェクトを使用している場合は、通過する必要があることを除いて、同じことが当てはまります。UIApplication
[UIApplication sharedApplication].keyWindow.rootViewController.navigationController;
もちろん、これらは両方ともMVCを大きく破壊するため、「デフォルトのナビゲーションコントローラー」にアクセスする必要のあるロジックをルートビューコントローラーに追加することを強くお勧めします。
スウィフト4:
guard let navigationController = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController else { return }