9

J'ai un uitabbarcontroller, qui contient plusieurs onglets et viewControllers. J'essaye de faire une boucle dans les contrôleurs de vue pour trouver le bon et appeler une méthode. mais le type de contrôleur de vue que je reçois, chaque fois que je passe par la boucle est un UINavigationController. Alors, comment puis-je simplement accéder à un contrôleur de vue dans mon tabBar?UITabBarController - Comment accéder à un contrôleur de vue?

for (UIViewController *v in self.tabBar.viewControllers) 
{ 
    if ([v isKindOfClass:[MyViewController class]]) 
    { 
      MyViewController *myViewController = v; 
      [v doSomething]; 
    } 
} 

Répondre

19

Vous avez probablement UINavigationControllers à la racine de vos onglets, donc ce que vous voulez faire est d'accéder au ViewController affiché par le UINavigationController.

Essayez de changer le code à ce qui suit:

for (UIViewController *v in self.tabBar.viewControllers) { 

    UIViewController *vc = v; 

    if ([v isKindOfClass:[UINavigationController class]]) { 
     vc = [v visibleViewController]; 
    } 

    if ([vc isKindOfClass:[MyViewController class]]) { 
      MyViewController *myViewController = vc; 
      [vc doSomething]; 
    } 
} 
+0

comment faire dans l'application classe déléguée – Ali

0

Vous ne voulez pas vraiment faire plus ... Ceci est un meilleur cas pour NSNotificationCenter.

En 2 lignes de code, vous pouvez obtenir les mêmes choses, sans avoir à faire le tour des circuits de contrôleurs. Voir ce post:

NSNotificationCenter addObserver in Swift

2

Cela peut être réalisé rapidement en utilisant un filtre de tableau:

var vc = tabBar.viewControllers!.filter({ (v) -> Bool in 
      return (v is YourViewController) 
    })[0] as! UINavigationController