UITabBarController异常行为?

4
如果我正常加载一个UITabBarController并在视图之间切换,它会调用每个视图控制器的viewWillAppear方法。但实际情况并非如此。 我想要在触摸另一个选项卡时立即切换到另一个选项卡。 如果我在其中一个选项卡(例如选项卡4)的viewWillAppear中指定要加载的选项卡 - 例如[self.tabBarController setSelectedIndex:0],则它会立即返回到选项卡0。
但是在那之后...当我在它们之间切换时,它不会调用任何选项卡的viewWillAppear。 例如,如果我再次转到选项卡4,则它不会回到选项卡0。我希望它成为一个永无止境的循环,因为我希望选项卡0在触摸选项卡4时立即加载。
但它只运行一次!!
为什么?

1
这个问题不需要任何代码。我很乐意发布代码,但是用代码解释会让问题变得太长。这个问题很简单明了。 - Legolas
好的。那么你在哪里调用 setSelectedItem?在某个静态方法中(例如 applicationDidFinichLaunching)还是其他地方? - akashivskyy
实际上,你提出了一个很好的观点。让我编辑一下问题,以适应我的确切情况。 - Legolas
你有检查每个视图的 viewDidDisappear: 方法吗?虽然我怀疑这不是问题所在,但是视图可能不知道它们已经消失了,因此无法再次出现。如果没有其他问题,检查一下也许是值得的。 - justin
我只能重现其中一半。我设置了两个选项卡,如果我点击第二个选项卡,我会调用setSelectedIndex:0并切换到0,在其中调用viewWillAppear。但它只运行一次... 你确定你的'0'选项卡上没有调用viewWillAppear吗? - akashivskyy
@Kashiv:当然可以。这就是我在这里发布问题的原因。我尝试在各个地方进行NSLog,但仍然存在问题。 - Legolas
2个回答

2

我认为我找到了一个解决方案。每次你点击选项卡时都会起作用,并且它会在两个选项卡上调用viewWillAppear

您可以在您的AppDelegate(或UITabBarController的代理中的其他位置)执行此操作:

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

示例代码:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if([self.tabBarController.viewControllers indexOfObject:viewController] == 1) {
        [self.tabBarController setSelectedIndex:0];
    }
}

这种方法会导致viewWillAppear被调用两次(一次是由用户交互引起的,另一次是由此代码引起的)。如果viewWillAppear内没有关键代码,则没有问题。 - Serhii Mamontov
你可以随时创建一个属性,指示是否应执行关键代码。 - akashivskyy

0

设置selectedIndex不会改变selectedViewController。您需要直接更改selectedViewController本身。请查看文档以获取更多详细信息。


我使用 setSelectedIndex 更改选定的标签页,它能正常工作,所以不是因为这个原因... - akashivskyy
设置 setSelectedIndex 只会更改所选标签,但它不会像触摸指定项目那样处理它。您将需要设置 selectedViewController。 - yinkou
不,他没有。setSelectedIndex != setSelectedTab。它会自动设置selectedViewControler - akashivskyy
@Legolas,我认为@yinkou是正确的。尝试做这样的事情:[[self tabBarController] setSelectedViewController:[[[self tabBarController] viewControllers] objectAtIndex:0]] - Serhii Mamontov
如果正在使用More导航控制器并且索引选项卡实际上位于其中,则使用-selectedIndex:将无效。在这种情况下,根据文档,可以使用-selectedViewController:来实现相应功能。 - Joe D'Andrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接