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您标签的根,所以你会想要做的是访问由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一个更好的情况。

在2行代码中,您可以完成相同的工作,而无需通过视图控制器阵列进行所有额外的循环播放。看到这个帖子:

NSNotificationCenter addObserver in Swift

2

这可以迅速在使用滤镜阵列来实现:

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