1. ホーム
  2. objective-c

[解決済み] ルートビューコントローラを取得する方法

2022-06-17 06:43:29

質問

ルートビューコントローラのインスタンスが必要です。

これらのアプローチを試してみました。

UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];

を返します。 null :

また、コントローラの配列を取得しようとすると

NSArray *viewControllers = self.navigationController.viewControllers;

コントローラは1つだけ返されますが、それは私のルートビューコントローラではありません。

ナビゲーションコントローラーから取得しようとすると

UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];

を返します。 null :

何か思い当たることはありますか? ルートビューコントローラのインスタンスを取得するために、他に何を試すことができますか?

ありがとうございます。

どのように解決するのですか?

にアクセスしようとしている場合 rootViewController にアクセスしようとしているなら、これを試してみてください。

Objective-C

YourViewController *rootController = (YourViewController*)[[(YourAppDelegate*)
                                   [[UIApplication sharedApplication]delegate] window] rootViewController];

スウィフト

let appDelegate  = UIApplication.sharedApplication().delegate as AppDelegate
let viewController = appDelegate.window!.rootViewController as YourViewController

スウィフト3

let appDelegate  = UIApplication.shared.delegate as! AppDelegate
let viewController = appDelegate.window!.rootViewController as! YourViewController

Swift 4 & 4.2

let viewController = UIApplication.shared.keyWindow!.rootViewController as! YourViewController

Swift 5 & 5.1 & 5.2

let viewController = UIApplication.shared.windows.first!.rootViewController as! YourViewController