UITabBarController和UINavigationController交互

时间:2010-10-02 22:27:44

标签: iphone objective-c uitabbarcontroller

我有一个带有两个标签的标签栏的应用。一个选项卡显示UINavigationController,另一个选项卡显示我自定义的UIViewController。

我注意到,如果切换到UINavigationController选项卡,然后在UITableViews中深入几级,如果我点击UITabBar上的当前选项卡,UINavigationController将弹出到它的根视图。

我想知道这是怎么发生的。看起来UINavigationController似乎不是UITabBar或UITabBarController的委托,这是一个选项。功能在某种程度上是自动的。

我想在第二个标签中对我的UIView实施类似的操作,所以我想弄明白这一点。谢谢!

2 个答案:

答案 0 :(得分:2)

UITabBarController正在做的是,无论何时点按已选择的标签,它都会检查该标签的UIViewController是否为UINavigationController。如果是,则弹出到rootViewController。

您要做的是将第二个标签设置为UITabBarController的代表并检查

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

当触发该方法时,请检查viewController是否是您的第二个标签viewController,selectedIndexUITabBarController)是否为1.如果是这样,请执行您的操作

仅适用于iOS 3.0或更高版本。在版本3.0之前的iOS版本中,仅当所选视图控制器实际更改时才会调用此方法。

答案 1 :(得分:1)

这实际上是一个很好的问题,直到今天我才注意到这种行为。 我对此有一个快速猜测,经过一些测试后,我似乎是正确的:由于你的TabBarController知道它的选项卡包含一个UINavigationController,它只是调用NavigationController的popToRootViewControllerAnimated:方法。我通过创建一个类别来测试这个,它覆盖了popToRootViewControllerAnimated:方法(当然,你不应该在你的应用程序中做),瞧,这个方法实际上被称为。 这回答了关于“如何”的问题。如果a可以考虑在ViewController中重现这种方法,我会告诉你。