9

У меня есть uitabbarcontroller, который содержит несколько вкладок и viewControllers. Я пытаюсь пройти через контроллеры представления, чтобы найти правильный и вызвать метод. , но тип контроллера представления, который я получаю, каждый раз, когда я просматриваю цикл, это UINavigationController. Итак, как я могу просто получить доступ к контроллеру представления в моем tabBar?UITabBarController - Как получить доступ к контроллеру представления?

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

ответ

19

Вы, скорее всего, UINavigationControllers в корне ваших вкладок, так что вы хотите сделать, это получить доступ к ViewController отображаемого UINavigationController.

Попробуйте изменить код на следующее:

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

, как сделать это в приложение класса делегата – Ali 2011-03-28 11:15:39

0

Вы действительно не хотите, чтобы сделать это больше ... Это лучший случай для NSNotificationCenter.

В двух строках кода вы можете выполнить одно и то же, без дополнительной экстренной тренировки по циклическому просмотру массивов контроллеров. Смотрите этот пост:

NSNotificationCenter addObserver in Swift

2

Это может быть достигнуто быстрым в использовании фильтра массива:

var vc = tabBar.viewControllers!.filter({ (v) -> Bool in 
      return (v is YourViewController) 
    })[0] as! UINavigationController 
Смежные вопросы