我的应用设置是一个带有三个标签的UITabBar。在每个选项卡中都有一个不同的UINavigationController。
在第一个选项卡中有一个刷新按钮 - 这将加载来自Web(xml)的大量数据。数据显示在三个标签栏中。
每当有人刷新数据时,如何释放UINavigationControllers?我想要的原因是当数据发生变化时,各个标签可能会显示全新的数据,因此保留该屏幕会有点危险..如果这有意义的话。因此,我想完全刷新UINavigationControllers,并在再次单击选项卡时显示导航堆栈中的第一个视图。
感谢Ryan的回答。我这样做的方式是这样的
for(UINavigationController *navController in [self.navigationController.tabBarController viewControllers]) {
NSLog(@"popping %@", [navController title]);
[navController popToRootViewControllerAnimated:NO];
if ([[navController title] isEqualToString:@"Tab2"])
{
Tab2RootController *newRoot2 = [[Tab2RootController alloc] initWithNibName:@"Tab2RootController" bundle:nil];
newRoot2.title = @"Tab2";
[navController setViewControllers:[NSArray arrayWithObject:newRoot2] animated:NO];
//need [newRoot2 release]?
}
if ([[navController title] isEqualToString:@"Tab3"])
{
Tab3RootController *newRoot = [[Tab3RootController alloc] initWithNibName:@"Tab3RootController" bundle:nil];
newRoot3.title = @"Tab3";
[navController setViewControllers:[NSArray arrayWithObject:newRoot3] animated:NO];
//need [newRoot3 release]?
}
}
答案 0 :(得分:3)
不支持您想要做的事情,但这是如何做到的:
-(void)showRootNavigationControllers {
for(UINavigationController *navController in [tabBarController viewControllers]) {
[navController popToRootViewControllerAnimated:NO];
}
}
干杯!
答案 1 :(得分:1)
-(void)showRootNavigationControllers {
for(UINavigationController *navController in [tabBarController viewControllers]) {
// You do this: set up the new root view controller for the given tab and assign it to a variable, e.g. newRootControllerForTab...
// Now set that new root controller as the only view controller in the nav controller.
[navController setViewControllers:[NSArray arrayWithObject:newRootControllerForTab] animated:NO];
}
}
请注意,这将立即切换视图控制器,没有动画。通过为每个导航栏设置整个视图控制器列表,它们将释放旧的视图控制器,只要没有其他人保留它们,它们就会被释放。