关于selectedIndex的 UITabBarController 文档说明了这一点:
此属性名义上表示属性数组的索引
viewControllers
。但是,如果所选视图控制器当前是More导航控制器,则此属性包含 valueNSNotFound
。设置此属性会将选定的视图控制器更改为
viewControllers
数组中指定索引处的视图控制器。要选择
更多导航控制器本身,您必须改为更改
selectedViewController
属性的值。
在 3.0 之前的 iPhone OS 版本中,此属性仅反映所选标签栏项目的索引。尝试将此值设置为在选项卡栏中不可见但由更多导航控制器管理的视图控制器的索引没有效果。
如果我理解正确,您需要改为“更改selectedViewController属性的值”,但您只会选择更多导航控制器,而不是其中的 VC。来自有关selectedViewController的相同文档:
该视图控制器是标签栏界面当前显示其自定义视图的控制器。指定的视图控制器必须在
viewControllers
数组中。为该属性分配一个新的视图控制器会更改当前显示的视图,并在选项卡栏中选择适当的选项卡。更改视图控制器也会
selectedIndex
相应地更新属性。此属性的默认值为
nil
。
在 iPhone OS 3.0 和更高版本中,您可以使用此属性来选择
viewControllers属性中的任何视图控制器。这包括由更多导航控制器管理的视图控制器,其标签栏项目在标签栏中不可见。您还可以使用它来选择More
导航控制器本身,该控制器可从
moreNavigationController属性中获得。
在 iPhone OS 3.0 之前,您只能选择更多导航控制器和标签栏项目可见的视图控制器子集。尝试将此属性设置为标签栏项目不可见的视图控制器无效。
至于解决方法,我想知道更多导航控制器的pushViewController:animated:
方法是否会在这里派上用场?给每个视图一个唯一的标签号(您可以在幕后将其与适当的 VC 关联)。保存最后激活的 VC 的标记。
在启动时,在标签栏控制器中选择适当的视图。如果视图的标签与前四个选项卡项的 VC 无关,则它必须位于更多导航控制器中。找到 VC,将其推送到更多导航控制器的堆栈中,然后直接选择更多导航控制器。
我还没有尝试过,但它可能值得一试!唯一潜在的问题(它可能是一个大问题)是您必须在设置更多导航控制器之后推送该 VC ,而不是之前。