重置我的标签栏应用程序的每个导航控制器

时间:2014-01-13 00:14:51

标签: ios objective-c uinavigationcontroller uitabbarcontroller reset

我有一个应用程序,它有一个带有四个标签的标签栏控制器。每个选项卡都有一个导航控制器,您可以深入到一定数量的视图控制器。 在特定的时间(当我检测到没有连接到互联网时)我需要“重置”每个导航栏,无论我当时在哪一个。 通过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。

2 个答案:

答案 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;