0

在我的基于 tabBarController 的应用程序中,我有四个选项卡 - tabA、tabB、tabC 和 tabD。用户将能够在选项卡之间跳转。

现在我的问题是:
- tabA、tabB 和 tabD 有单个 viewControllers
- tabC 虽然有 3 个 viewControllers - vc1、vc2 和 vc3

我遇到了应用程序记住用户最后在哪个视图控制器中的问题,当用户点击 tabC 时,控件转到用户所在的最后一个视图控制器。例如,假设以下是序列:

  1. 用户点击 tabA :显示 tabA 的视图控制器
  2. 用户点击 tabD :显示 tabD 的视图控制器
  3. 用户点击 tabC :显示视图控制器 vc1。在点击某些操作时,用户被带到 vc3
  4. 用户点击 tabB :显示 tabB 的视图控制器
  5. 用户点击 tabC :显示 vc3 - 而我想显示 vc1

到目前为止,我已经在tabC的vc1中尝试了以下,但是控制根本没有来到vc1:

- (void) viewWillAppear:(BOOL)animated {
      [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}

如何告诉 tabC 始终加载 vc1?

问候 - 在此先感谢....
山姆。

4

2 回答 2

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->vc3,我点击 tabB,然后点击 tabC 进行练习。tmp数组在调试器中的元素为零。

于 2011-09-18T21:16:36.033 回答
0

您对 tabC 的 vc1 的调用可能不会被调用 -viewWillAppear:只有当视图出现在显示器上时才会调用。

你可能想看看这个函数:

- (void)tabBarController:(UITabBarController *)tabBarController 
   didSelectViewController:(UIViewController *)viewController

链接到 Apple 开发者文档

这个功能:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

链接到 Apple 开发者文档

如果您在您的tabBarController委托中实现这一点,您可以在用户选择 tabC 时采取行动,即:

- (void)tabBarController:(UITabBarController *)tabBarController 
   didSelectViewController:(UIViewController *)viewController
{
    if (viewController == \* tabC view controller */) {
        [tabCViewController.navigationController popToRootViewController:YES];
    }
}
于 2011-09-18T01:19:58.367 回答