2017-07-25 1 views
0

Je voudrais passer d'un viewController au premier viewController lié au contrôleur de barre d'onglets par le code.Charger toutes les vues liées au contrôleur de barre d'onglets par code dur

La scène tabBarController a l'ID du scénario tabView.

Je travaille sur cette façon:

  let storyboard = UIStoryboard(name: "Main", bundle: nil) 

      let vc: UITabBarController! 
      storyboard.instantiateViewController(withIdentifier: "tabView") 

      vc=storyboard.instantiateViewController(withIdentifier: "tabView") as! UITabBarController 
      DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { 
       self.present(vc as! UIViewController, animated: true, completion: nil) 
      } 

Mais il ne charge que le premier viewController (sur 5) sans la barre d'onglets en rapport avec. Comment puis-je le résoudre?

Répondre

1

Oh, ce code a l'air si mauvais.

  1. Dans votre storyboard, donnez l'ID "tabView" au TabBarController, pas le ViewController à l'intérieur. Pourquoi avez-vous double instanciation de ViewController?
  2. Pourquoi? faites-le une fois et attribuez-le à la variable vc. Pourquoi avez-vous créé un délai avant de présenter le VC? C'est une sorte de contournement de quelque chose?

Code de travail:

let vc = storyboard.instantiateViewController(withIdentifier: "tabView") as! UITabBarController 
    self.present(vc, animated: true) 
+0

Non, il ne charge toujours que le premier viewController associé à la barre d'onglets sans afficher ce dernier. J'ai contrôlé que l'ID tabView a été donné à TabBarController et c'est tout. –

+0

Après l'avoir entouré avec les travaux de DispatchQueue! –

0

Utilisez

(1) si vous souhaitez naviguer à partir Appdelegate

 let appDelegate = UIApplication.sharedApplication.delegate as! AppDelegate 
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let tabBar = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! TabBarController 
    appDelegate.window?.rootViewController = tabBar 
    appDelegate.window?.makeKeyAndVisible() 

(2) si vous souhaitez naviguer à partir viewcontroller qui a racine de navigation

self.navigationController?.pushViewController(tabBar, animated: true) 
+0

Dans le premier cas, je n'ai aucun attribut de fenêtre dans ma classe viewController. Dans la seconde, il n'y a pas de méthode avec ce nom défini. –