我有一个带有两个标签的标签栏的应用。一个选项卡显示UINavigationController,另一个选项卡显示我自定义的UIViewController。
我注意到,如果切换到UINavigationController选项卡,然后在UITableViews中深入几级,如果我点击UITabBar上的当前选项卡,UINavigationController将弹出到它的根视图。
我想知道这是怎么发生的。看起来UINavigationController似乎不是UITabBar或UITabBarController的委托,这是一个选项。功能在某种程度上是自动的。
我想在第二个标签中对我的UIView实施类似的操作,所以我想弄明白这一点。谢谢!
答案 0 :(得分:2)
UITabBarController
正在做的是,无论何时点按已选择的标签,它都会检查该标签的UIViewController
是否为UINavigationController
。如果是,则弹出到rootViewController。
您要做的是将第二个标签设置为UITabBarController
的代表并检查
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
当触发该方法时,请检查viewController
是否是您的第二个标签viewController,selectedIndex
(UITabBarController
)是否为1.如果是这样,请执行您的操作
仅适用于iOS 3.0或更高版本。在版本3.0之前的iOS版本中,仅当所选视图控制器实际更改时才会调用此方法。
答案 1 :(得分:1)
这实际上是一个很好的问题,直到今天我才注意到这种行为。
我对此有一个快速猜测,经过一些测试后,我似乎是正确的:由于你的TabBarController知道它的选项卡包含一个UINavigationController,它只是调用NavigationController的popToRootViewControllerAnimated:
方法。我通过创建一个类别来测试这个,它覆盖了popToRootViewControllerAnimated:
方法(当然,你不应该在你的应用程序中做),瞧,这个方法实际上被称为。
这回答了关于“如何”的问题。如果a可以考虑在ViewController中重现这种方法,我会告诉你。