Set rootViewController of UINavigationController by method other than initWithRootViewController
How Do I set the rootViewController
of UINavigationController
by a method other than initWithRootViewController
?
I want use initWithNavigationBarClass:toolbarClass:
to deliver a custom toolbar for my NavigationController, so I don't think I can use initWithRootViewController
.
Solution 1:
You can solve this by calling setViewControllers
.
Like this:
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];
[navigationController setViewControllers:@[yourRootViewController] animated:NO];
Swift version:
let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: UIToolbar.self)
navigationController.setViewControllers([yourRootViewController], animated: false)
Solution 2:
Knowledge Sharing Using Swift:
Changing root view controller from class other than app delegate.swift
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController
let nav = UINavigationController(rootViewController: homeViewController)
appdelegate.window!.rootViewController = nav
Hope this will helpful for someone.
Changing rootviewcontroller With Animation can be achieved with:
UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
self.window?.rootViewController = anyViewController
}, completion: nil)
We can write a generalised method too, similar to this.
Solution 3:
this one works for me, hope it helps you,
let rootVC:LoginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
let nvc:UINavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("RootNavigationController") as! UINavigationController
nvc.viewControllers = [rootVC]
UIApplication.sharedApplication().keyWindow?.rootViewController = nvc
Solution 4:
In swift 3.0 xcode8.1
in general settings delete in Main Interface: Main <-this after Main Interface:
class AppDelegate...
var window: UIWindow?
fun application...
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: NewYourController)