我有一个应用程序,它有一个带有四个标签的标签栏控制器。每个选项卡都有一个导航控制器,您可以深入到一定数量的视图控制器。 在特定的时间(当我检测到没有连接到互联网时)我需要“重置”每个导航栏,无论我当时在哪一个。 通过tabbar Delegate从一个选项卡切换到另一个选项卡时,我看到了有关“重置”的答案。但我没有这样的事件(我需要在任何随机时间,当应用程序离线时)。 我在app delegate中尝试过这种方法:
-(void)resetViews{
UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
tabController.selectedViewController=[tabController.viewControllers objectAtIndex:0];
UINavigationController *primero=(UINavigationController *)tabController.selectedViewController;
[primero popToRootViewControllerAnimated:YES];
...
}
每个选项卡的代码都相同,即索引0,1,2,3。但它不起作用。我究竟做错了什么? 提前致谢, T.A。
答案 0 :(得分:4)
- (void)resetViews {
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
for(UIViewController *foo in tabBarController.viewControllers) {
if([foo isKindOfClass:[UINavigationController class]]) {
UINavigationController *bar = (UINavigationController*)foo;
[bar popToRootViewControllerAnimated:YES];
}
}
}
未经测试,但应该有效。
tabBarController.viewControllers
是标签栏控制器包含的视图控制器的数组。您当前的代码似乎只是重置选定的选项卡,对吧?此代码应重置所有选项卡。
除非更改选定的标签,否则您无需更改tabBarController.selectedViewController
。
答案 1 :(得分:0)
我应该在接受的回复中添加评论,但我的声誉太低而无法做到。
就我而言,要获取viewControllers数组,我不得不使用:
UITabBarController *tabBarController = (UITabBarController *)self.navigationController.parentViewController;