使用UITabBarController设置基于iPhone窗口的新项目,并在IB中连接所有内容。使用self.tabBarController.selectedIndex = 1;您应该能够以编程方式切换标签。但是,它似乎只在某些情况下起作用。如果你将它绑定到IBAction或作为图像选择器的结果,它可以很好地工作。但是,如果你称它太快,它似乎只是部分工作。在视图中选中的选项卡仍然是旧视图。
我试图把self.tabBarController.selectedIndex = 1;在viewDidLoad中的switch语句中作为在启动时返回先前选定的选项卡的方法,它将无法工作。然后我添加了一个NSTimer并试图这样做.01秒后它工作正常,所以这显然是一个时间/订购问题。
有什么时候我应该清楚切换标签的建议吗?
答案 0 :(得分:2)
由于您开始使用基于窗口的项目,我假设您正在以编程方式创建标签栏控制器。这里的问题是只要初始化标签栏控制器(alloc / init),viewDidLoad就会触发。由于标签栏控制器的视图控制器属性在此之后才设置,因此当视图控制器计数为0时,您将所选索引设置为1.根据标签栏控制器文档,它将吞下错误并设置所选索引回到0。
它与延迟一起工作的原因是延迟可能足够长,以允许在设置所选索引之前设置视图控制器。这很危险,因为如果您的视图控制器由于任何原因加载速度很慢,您可能会在准备好之前设置所选索引。
令人恼火的是,它的工作方式与从笔尖加载标签栏控制器的方式不同。如果它是从一个nib加载的,那么在调用viewDidLoad之前,视图控制器就会出现。
无论如何,你基本上有两个选项,其中任何一个都涉及子类化UITabBarController:
没有尝试过这些选项中的任何一个,但是我想要,因为我遇到了同样的问题。