2017-07-11 1 views
1

Je peux passer d'un UIViewController à un autre dans un UITabBarController en utilisant tabBarController?.selectedIndex = targetIndex. Je voudrais savoir comment déclencher une segue après le changement.Trigger segue dans un autre VC UITabBarController avec charge utile?

J'ai essayé de faire if let vc = tabBarController?.viewControllers?[0] as MyViewController {} et d'appeler le vc.performSegue() mais il a une erreur, se plaignant qu'il s'agit d'un contrôleur UINavigation. (Je ne pouvais même pas obtenir vc.prepare() pour fonctionner, mais je ne peux pas trouver comment créer un UIStoryBoardSegue, dont il a besoin en tant que premier argument, à partir de rien en utilisant l'identificateur de segue.) Je pense que c'est parce que tous mes UIViewControllers UITabBarController sont dans les contrôleurs de navigation.

Comment passer de l'index 0 à 1 dans le contrôleur de la barre d'onglets, puis déclencher une séquence dans le contrôleur de vue intégré dans le contrôleur de navigation? Remarque, j'ai besoin de transmettre une copie de l'objet appelant (mon UIViewController) ou une charge utile à des fins contextuelles à l'UIViewController étant segmenté.

Répondre

1

Bien comme vous l'avez dit, le viewController qui est présenté à l'index est un UINavigationController. Vous devriez obtenir le rootViewController de UINavigationController et exécuter la Segue sur le RootViewController.

Ci-dessous le code devrait fonctionner:

self.tabBarController?.selectedIndex = 1 
guard let vc = self.tabBarController?.viewControllers?[1] as? UINavigationController else { 
    return 
} 
guard let rootVC = vc.viewControllers.first as? SecondViewController else { 
    return 
} 
rootVC.vc = self 
rootVC.performSegue(withIdentifier: "test", sender: self) 
+0

Merci de remarquer la propriété 'vc.viewControllers.first' - Je suis nouveau à la programmation iOS afin de trouver encore mon chemin rond. – Federer