How to find root UIViewController How to find root UIViewController ios ios

How to find root UIViewController

Get the current keyWindow:

UIWindow *window = [UIApplication sharedApplication].keyWindow;

Get its rootViewController:

UIViewController *rootViewController = window.rootViewController;

NOTE: If an UIAlertView is currently being shown, a new window is being created and assigned to be the keyWindow. There might be other exceptional cases as well that will not keep your application window to be the keyWindow.

In my experience, this is the ideal solution to get the rootViewController:

[[[[UIApplication sharedApplication] delegate] window] rootViewController]

Note: In-case of an active UIAlert or UIActionSheet, you get the Alert or Action Sheet as your key window.

Use the app singleton. Something like:

[[[UIApplication sharedApplication] delegate] rootViewController] should get it if your viewController that is the root is named rootViewController