90 votes

Définir le rootViewController de UINavigationController par une méthode autre que initWithRootViewController

Comment puis-je régler le rootViewController de UINavigationController par une méthode autre que initWithRootViewController ?

Je veux utiliser initWithNavigationBarClass:toolbarClass: pour fournir une barre d'outils personnalisée pour mon NavigationController, donc je ne pense pas que je puisse utiliser initWithRootViewController .

166voto

Leon Lucardie Points 3998

Vous pouvez résoudre ce problème en appelant setViewControllers .

Comme ça :

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];

[navigationController setViewControllers:@[yourRootViewController] animated:NO];

Version Swift :

let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: UIToolbar.self)

navigationController.setViewControllers([yourRootViewController], animated: false)

30voto

Arvind Points 310

Partage des connaissances à l'aide de Swift :

Modification du contrôleur de vue racine à partir d'une classe autre que 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

J'espère que cela sera utile à quelqu'un.

Le changement de rootviewcontroller avec l'animation peut être réalisé avec :

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

Nous pouvons également écrire une méthode généralisée, similaire à la méthode suivante ceci.

17voto

Patel Jigar Points 1358

Celui-ci fonctionne pour moi, j'espère qu'il vous aidera,

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

2voto

Anton Russia Points 141

Dans swift 3.0 xcode8.1

dans les paramètres généraux supprimer dans l'interface principale : Principal <-cela après Main Interface :

class AppDelegate...

 var window: UIWindow?

    fun application...

      window = UIWindow(frame: UIScreen.main.bounds)
      window?.makeKeyAndVisible()
      window?.rootViewController = UINavigationController(rootViewController: NewYourController)

-3voto

idris yıldız Points 1853
  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()
    })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X