「最上位」のビュー コントローラー (現在のビューを担当するコントローラー) を見つけることができれば便利なのに、その方法を見つけられないというケースがいくつかありました。
基本的に、課題は次のとおりです。ビュー コントローラー(またはビュー)ではないクラス (アクティブ ビューのアドレスを持たない)で実行されていて、最上位のビュー コントローラーのアドレス (または、ナビゲーション コントローラーのアドレスなど) が渡されていない場合、そのビュー コントローラーを見つけることは可能ですか? (できる場合、どのようにすればよいですか?)
あるいは、それができない場合、最上位のビューを見つけることは可能ですか?
ベストアンサー1
受け入れられた回答と@fishstixの回答を組み合わせる必要があると思います
+ (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
Swift 3.0以降
func topMostController() -> UIViewController? {
guard let window = UIApplication.shared.keyWindow, let rootViewController = window.rootViewController else {
return nil
}
var topController = rootViewController
while let newTopController = topController.presentedViewController {
topController = newTopController
}
return topController
}