以编程方式更改选项卡时,iPhone View不会使用UITabBarController进行更新

时间:2009-08-19 03:10:46

标签: iphone uitabbarcontroller

使用UITabBarController设置基于iPhone窗口的新项目,并在IB中连接所有内容。使用self.tabBarController.selectedIndex = 1;您应该能够以编程方式切换标签。但是,它似乎只在某些情况下起作用。如果你将它绑定到IBAction或作为图像选择器的结果,它可以很好地工作。但是,如果你称它太快,它似乎只是部分工作。在视图中选中的选项卡仍然是旧视图。

我试图把self.tabBarController.selectedIndex = 1;在viewDidLoad中的switch语句中作为在启动时返回先前选定的选项卡的方法,它将无法工作。然后我添加了一个NSTimer并试图这样做.01秒后它工作正常,所以这显然是一个时间/订购问题。

有什么时候我应该清楚切换标签的建议吗?

1 个答案:

答案 0 :(得分:2)

由于您开始使用基于窗口的项目,我假设您正在以编程方式创建标签栏控制器。这里的问题是只要初始化标签栏控制器(alloc / init),viewDidLoad就会触发。由于标签栏控制器的视图控制器属性在此之后才设置,因此当视图控制器计数为0时,您将所选索引设置为1.根据标签栏控制器文档,它将吞下错误并设置所选索引回到0。

它与延迟一起工作的原因是延迟可能足够长,以允许在设置所选索引之前设置视图控制器。这很危险,因为如果您的视图控制器由于任何原因加载速度很慢,您可能会在准备好之前设置所选索引。

令人恼火的是,它的工作方式与从笔尖加载标签栏控制器的方式不同。如果它是从一个nib加载的,那么在调用viewDidLoad之前,视图控制器就会出现。

无论如何,你基本上有两个选项,其中任何一个都涉及子类化UITabBarController:

  1. 将视图控制器添加到选项卡栏init / initWithNibName方法中的选项卡栏控制器。然后,您可以在viewDidLoad
  2. 中设置所选索引
  3. 覆盖setViewControllers方法,并在添加后设置所选索引。
  4. 没有尝试过这些选项中的任何一个,但是我想要,因为我遇到了同样的问题。