在我的基于tabBarController的应用程序中,我有四个选项卡 - tabA,tabB,tabC和tabD。用户可以在标签之间跳转。
现在我的问题:
- tabA,tabB和tabD具有单个viewControllers
- tabC虽然有3个viewControllers - vc1,vc2和vc3
我遇到的问题是app会记住用户最后一个viewController,当用户点击tabC时,控件会转到用户所在的最后一个视图控制器。例如,假设以下是顺序:
到目前为止,我在tabC的vc1中尝试了以下内容,但控件根本没有进入vc1:
- (void) viewWillAppear:(BOOL)animated {
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}
如何告诉tabC始终加载vc1?
问候 - 提前谢谢......
萨姆。
答案 0 :(得分:0)
您对tabC的vc1的调用可能未被调用 - viewWillAppear:
仅在视图显示在显示屏上时才会被调用。
您可能希望查看此功能:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
(Link to Apple Developer docs)
和这个功能:
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
(Link to Apple Developer docs)
如果您在tabBarController
委托中实施此操作,则可以在用户选择tabC时执行操作,即:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
if (viewController == \* tabC view controller */) {
[tabCViewController.navigationController popToRootViewController:YES];
}
}
答案 1 :(得分:0)
@dvorak:谢谢你的回答 - 抱歉拖延....
我知道我写的不是答案 - 而是想展示我正在使用的代码。
我没有这个建议的运气。我让AppDelegate成为TabBarControllerDelegate。调用回调函数 - 但是,使用以下代码,我无法使用popToRootViewController:
- (void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController {
NSLog(@"ViewController is <%@>", viewController.tabBarItem.title);
if ([viewController.tabBarItem.title isEqualToString:@"tabC"]) {
NSArray *tmp = [viewController.navigationController.tabBarController viewControllers];
[viewController.navigationController popToRootViewControllerAnimated:YES];
}
}
我收集了 tmp 变量中的所有ViewControllers,希望在访问tabC的所有三个VC之后看到数组中的3个ViewControllers。从tabC-&gt; vc3,我点击tabB,然后点击tabC进行练习。 tmp 数组在调试器中没有元素。