TabBarController与视图控制器

时间:2011-09-18 00:36:02

标签: viewcontroller tabbarcontroller

在我的基于tabBarController的应用程序中,我有四个选项卡 - tabA,tabB,tabC和tabD。用户可以在标签之间跳转。

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

我遇到的问题是app会记住用户最后一个viewController,当用户点击tabC时,控件会转到用户所在的最后一个视图控制器。例如,假设以下是顺序:

  1. 用户点击tabA:显示tabA的视图控制器
  2. 用户点击tabD:显示tabD的视图控制器
  3. 用户点击tabC:显示视图控制器vc1。在点击某些操作时,用户将被带到vc3
  4. 用户点击tabB:显示tabB的视图控制器
  5. 用户点击tabC:显示vc3 - 相反,我想显示vc1
  6. 到目前为止,我在tabC的vc1中尝试了以下内容,但控件根本没有进入vc1:

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

    如何告诉tabC始终加载vc1?

    问候 - 提前谢谢......
    萨姆。

2 个答案:

答案 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 数组在调试器中没有元素。