Set rootViewController of UINavigationController by method other than initWithRootViewController

后端 未结 5 706
死守一世寂寞
死守一世寂寞 2020-12-02 11:45

How Do I set the rootViewController of UINavigationController by a method other than initWithRootViewController?

I want use

相关标签:
5条回答
  • 2020-12-02 12:16

    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.

    Edited:

    Changing rootviewcontroller With Animation can be achieve with:

     UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: {
        self.window?.rootViewController = anyViewController
    }, completion: nil)
    

    We can write generalise method too similar to this.

    0 讨论(0)
  • 2020-12-02 12:17

    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
    
    0 讨论(0)
  • 2020-12-02 12:21

    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)
    
    0 讨论(0)
  • 2020-12-02 12:24

    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)
    
    0 讨论(0)
  • 2020-12-02 12:34
      let storyboard = UIStoryboard(name: "Main", bundle: nil)         
      let yourNewRootView = storyboard.instantiateViewControllerWithIdentifier("yourNewRootView") as? yourNewRootView
    
    
       self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    
        UIView.transitionWithView(self.window!, duration: 0.1, options: [UIViewAnimationOptions.TransitionFlipFromRight,UIViewAnimationOptions.TransitionFlipFromLeft], animations: 
        {
            // animation
    
            }, completion: { (finished: Bool) -> () in
    
                self.window?.rootViewController = nil
                self.window?.rootViewController = yourNewRootView
                self.window?.makeKeyAndVisible()
        })
    
    0 讨论(0)
提交回复
热议问题