如何从 AppDelegate 上的 TabBarController 获取 ViewController?
Posted
技术标签:
【中文标题】如何从 AppDelegate 上的 TabBarController 获取 ViewController?【英文标题】:How can I get ViewController from TabBarController on AppDelegate? 【发布时间】:2012-05-21 16:19:57 【问题描述】:我用的是ios5的storyboard,我的初始视图控制器是TabBarController
,view1&view2&view3&view4有四种关系,那么如何获取view3的视图控制器呢?
我试过了:
[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];
但它不起作用......
【问题讨论】:
【参考方案1】:您说您的初始(根)视图控制器是 UITabBarController,但您指的是带有导航控制器和标签栏控制器的视图控制器。您是否在视图控制器层次结构中混淆了?
编辑:
如果您的根视图控制器实际上只是一个选项卡栏控制器,并且您想获得第三个选项卡,则代码如下:
[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
【讨论】:
“UIViewController”没有可见的@interface 声明选择器“viewControllers” 是的,它有效。我太傻了。 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;【参考方案2】:[self.tabBarController setSelectedIndex:2];
【讨论】:
虽然是最简单的答案,但这是获取 tabBarController 的最简单和最好的方法。 UITabBarController 向 UIViewController 添加一个类别,如果视图在一个中,则返回 UITabBarController,否则返回 NULL。 有没有办法在选定的索引处获取对象(视图控制器)?【参考方案3】:试试这个方法
在任何视图控制器中
YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3];
这将返回您的视图控制器对象。将其转换为您的视图控制器,您就可以使用它了。 奔跑吧
【讨论】:
这个答案的 Swift 3 版本是什么?【参考方案4】:斯威夫特 4.0
let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller
你可以进一步检查 Visible ViewController
if let nav = viewC as? UINavigationController
if nav.visibleViewController is YourViewControllerName
// Do Code
【讨论】:
【参考方案5】: UIViewController *loginViewController=self.window.rootViewController;
UITabBarController *controller=loginViewController.tabBarControllerObj;
UIViewController *selectedController=controller.selectedViewController;
从中您将获得选定的视图控制器。
要获取所有视图控制器,只需替换
NSArray *viewControllers = [controller viewControllers];
【讨论】:
以上是关于如何从 AppDelegate 上的 TabBarController 获取 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 appdelegate 访问 uitablviews 选定项目?
如何在 iOS 7.1 中更改 TabBar 上的图像和标签颜色?
AppDelegate Touch3D Xcode - TabBar
iOS 12.1更新 tabbar 从二级返回tabbar出现跳动问题