How to get root view controller?
As suggested here by @0x7fffffff, if you have UINavigationController it can be easier to do:
YourViewController *rootController =
(YourViewController *)
[self.navigationController.viewControllers objectAtIndex: 0];
The code in the answer above returns UINavigation controller (if you have it) and if this is what you need, you can use self.navigationController
.
Objective-C
UIViewController *controller = [UIApplication sharedApplication].keyWindow.rootViewController;
Swift 2.0
let viewController = UIApplication.sharedApplication().keyWindow?.rootViewController
Swift 5
let viewController = UIApplication.shared.keyWindow?.rootViewController
if you are trying to access the rootViewController
you set in your appDelegate. try this:
Objective-C
YourViewController *rootController = (YourViewController*)[[(YourAppDelegate*)
[[UIApplication sharedApplication]delegate] window] rootViewController];
Swift
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let viewController = appDelegate.window!.rootViewController as YourViewController
Swift 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