How do I get the RootViewController from a pushed controller?

前端 未结 9 1451
小鲜肉
小鲜肉 2020-12-04 07:50

So, I push a view controller from RootViewController like:

[self.navigationController pushViewController:anotherViewController animated:YES] ;

BUT, FRO

9条回答
  •  独厮守ぢ
    2020-12-04 08:05

    Here I came up with universal method to navigate from any place to root.

    1. You create a new Class file with this class, so that it's accessible from anywhere in your project:

      import UIKit
      
      class SharedControllers
      {
          static func navigateToRoot(viewController: UIViewController)
          {
              var nc = viewController.navigationController
      
              // If this is a normal view with NavigationController, then we just pop to root.
              if nc != nil
              {
                  nc?.popToRootViewControllerAnimated(true)
                  return
              }
      
              // Most likely we are in Modal view, so we will need to search for a view with NavigationController.
              let vc = viewController.presentingViewController
      
              if nc == nil
              {
                  nc = viewController.presentingViewController?.navigationController
              }
      
              if nc == nil
              {
                  nc = viewController.parentViewController?.navigationController
              }
      
              if vc is UINavigationController && nc == nil
              {
                  nc = vc as? UINavigationController
              }
      
              if nc != nil
              {
                  viewController.dismissViewControllerAnimated(false, completion:
                      {
                          nc?.popToRootViewControllerAnimated(true)
                  })
              }
          }
      }
      
    2. Usage from anywhere in your project:

      {
          ...
          SharedControllers.navigateToRoot(self)
          ...
      }
      

提交回复
热议问题