iOSで最上位のビューコントローラを見つける方法 質問する

iOSで最上位のビューコントローラを見つける方法 質問する

「最上位」のビュー コントローラー (現在のビューを担当するコントローラー) を見つけることができれば便利なのに、その方法を見つけられないというケースがいくつかありました。

基本的に、課題は次のとおりです。ビュー コントローラー(またはビュー)ではないクラス (アクティブ ビューのアドレスを持たない)で実行されていて、最上位のビュー コントローラーのアドレス (または、ナビゲーション コントローラーのアドレスなど) が渡されていない場合、そのビュー コントローラーを見つけることは可能ですか? (できる場合、どのようにすればよいですか?)

あるいは、それができない場合、最上位のビューを見つけることは可能ですか?

ベストアンサー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
}

おすすめ記事