1

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

我试图把 self.tabBarController.selectedIndex = 1; 在 viewDidLoad 中的 switch 语句中,作为在启动时返回到先前选择的选项卡的一种方法,它将不起作用。然后我添加了一个 NSTimer 并尝试在 0.01 秒后执行它,它工作正常,所以这显然是一个时间/排序问题。

关于何时应该清楚切换标签的任何建议?

4

1 回答 1

2

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

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

令人恼火的是,它与从笔尖加载标签栏控制器时的工作方式不同。如果它是从 nib 加载的,则视图控制器会在调用 viewDidLoad 之前存在。

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

  1. 在标签栏 init/initWithNibName 方法中将您的视图控制器添加到标签栏控制器。然后您可以在 viewDidLoad 中设置您选择的索引
  2. 覆盖 setViewControllers 方法,并在添加后设置您选择的索引。

这些选项中的任何一个都没有尝试过,但我即将尝试,因为我遇到了同样的问题。

于 2009-10-19T22:43:01.697 回答