【问题标题】:UITabBarController - How to access a view controller?UITabBarController - 如何访问视图控制器?
【发布时间】:2010-11-29 18:16:41
【问题描述】:
我有一个 uitabbar 控制器,它包含多个选项卡和视图控制器。
我正在尝试遍历视图控制器以找到正确的控制器并调用方法。
但是我得到的视图控制器的类型,每次我通过循环时都是一个 UINavigationController。那么如何才能简单地访问我的 tabBar 中的视图控制器呢?
for (UIViewController *v in self.tabBar.viewControllers)
{
if ([v isKindOfClass:[MyViewController class]])
{
MyViewController *myViewController = v;
[v doSomething];
}
}
【问题讨论】:
标签:
iphone
uiviewcontroller
uinavigationcontroller
uitabbarcontroller
【解决方案1】:
您很可能在选项卡的根目录中有 UINavigationController,因此您要做的是访问 UINavigationController 显示的 ViewController。
尝试将代码更改为以下内容:
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];
}
}
【解决方案2】:
这可以通过使用数组过滤器快速实现:
var vc = tabBar.viewControllers!.filter({ (v) -> Bool in
return (v is YourViewController)
})[0] as! UINavigationController
【解决方案3】:
在 Swift 4 中,从 UITabBarController 获取 ViewController。
let tabBarController : UITabBarController = self.window?.rootViewController as! UITabBarController;
tabBarController.selectedIndex = 0
let navigationController = tabBarController.selectedViewController as! UINavigationController
let controllers = navigationController.viewControllers // will give array
if controllers.count > 0 {
if let viewC = controllers[0] as? DesiredViewController {
// do desired work
}
}