ios uinavigationcontroller uitoolbar iphone-5

ios - Establecer rootViewController de UINavigationController por un método distinto de initWithRootViewController



uitoolbar iphone-5 (5)

En swift 3.0 xcode8.1

en la configuración general eliminar en la interfaz principal: Principal <-esto después de la interfaz principal:

class AppDelegate... var window: UIWindow? fun application... window = UIWindow(frame: UIScreen.main.bounds) window?.makeKeyAndVisible() window?.rootViewController = UINavigationController(rootViewController: NewYourController)

¿Cómo configuro el rootViewController de UINavigationController por un método distinto de initWithRootViewController ?

Quiero usar initWithNavigationBarClass:toolbarClass: para entregar una barra de herramientas personalizada para mi NavigationController, así que no creo que pueda usar initWithRootViewController .


Puede resolver esto llamando a setViewControllers .

Me gusta esto:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]]; [navigationController setViewControllers:@[yourRootViewController] animated:NO];


este funciona para mí, espero que te ayude

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


Compartir conocimiento usando Swift:

Cambiar el controlador de vista raíz de la clase que no sea la aplicación 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

Espero que esto sea útil para alguien.

Editado:

El cambio de rootviewcontroller con animación se puede lograr con:

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

Podemos escribir el método de generalización muy similar a this.


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() })