UITabBarController - 如何访问视图控制器?
Posted
技术标签:
【中文标题】UITabBarController - 如何访问视图控制器?【英文标题】:UITabBarController - How to access a view controller? 【发布时间】: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];
【问题讨论】:
【参考方案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
【讨论】:
【参考方案4】:你真的不想再这样做了……这对 NSNotificationCenter 来说是一个更好的例子。
在 2 行代码中,您可以完成相同的事情,而无需在视图控制器数组中循环使用所有额外的戏剧。看这篇文章:
NSNotificationCenter addObserver in Swift
【讨论】:
以上是关于UITabBarController - 如何访问视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何从它的项目 ViewControllers 访问 UITabBarController 的变量
如何减少uitabbarcontroller中选项卡的点击访问长度?
如何从应用程序委托访问 uitabbarcontroller 内的 uinavigationcontroller 内的 uitableview?
无法从模态 ViewController 访问 UITabBarController
UISplitview:从 appDelegate 访问 UITabBarController
从 UITabBarController 和 UINavigationController 访问 UIViewController