在我的iPhone应用程序中,为了恢复以前查看的选项卡,在启动时我设置了setSelectedIndex :(也尝试过setSelectedViewController:根据文档但无效)
这适用于iPhone OS 3.0 - 但是在OS 2.x上,所选索引大于3(前4个选项卡)不会切换到所需视图。 Apple在此记录了这一点:http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/instp/UITabBarController/selectedViewController
我想知道是否可以切换到iPhone OS 2.x下的视图控制器?任何帮助表示赞赏。
我的模拟器设置索引大于3会引发错误(对于iPhone OS 2.x) - 所以我把它包装在@try {..} @catch(id ..){}块中 - 希望这个技术帮助某人。
答案 0 :(得分:7)
也许这会有所帮助。我所做的是保存所选标签栏项的索引。当应用程序启动时,我检查数字是否大于3,如果是,我将选定的标签栏视图控制器设置为更多导航控制器,然后只需从更多导航控制器推送保存的索引标签栏视图控制器。
if ([[WSFUserDefaults sharedInstance] savedTabBarLocation] > 0) {
if ([[WSFUserDefaults sharedInstance] savedTabBarLocation] > 3) {
UIViewController *selectViewController = [tabBarController.viewControllers objectAtIndex:[[WSFUserDefaults sharedInstance] savedTabBarLocation]];
[tabBarController setSelectedViewController:tabBarController.moreNavigationController];
[tabBarController.moreNavigationController popToRootViewControllerAnimated:NO];//make sure we're at the top level More
[tabBarController.moreNavigationController pushViewController:selectViewController animated:NO];
}
else {
[tabBarController setSelectedIndex:[[WSFUserDefaults sharedInstance] savedTabBarLocation]];
}
}
答案 1 :(得分:2)
我在第2版上工作。
我的代码就在这里,工作很可爱。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Add the tab bar controller's current view as a subview of the window
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[window addSubview:tabBarController.view];
// Settings getLastViewIndex is just, 0,1,2,3 depending on what it was last set.
tabBarController.selectedIndex = [Settings getLastViewIndex];
答案 2 :(得分:2)
关于 selectedIndex 的UITabBarController文档拼写出来:
此属性名义上代表一个 索引到数组中
viewControllers
财产。但是, if 选定的视图控制器是 目前更多导航 控制器,此属性包含 价值NSNotFound
。设置这个 属性更改选定的视图 控制器到了一个 指定的指数viewControllers
数组。选择 更多导航控制器本身,你 必须改变的价值selectedViewController
财产 代替。在之前的iPhone OS版本中 版本3.0,此属性反映 所选标签栏项的索引 只有。试图将此值设置为 视图控制器的索引 在标签栏中看不到,但是 而是由更多导航管理 控制器,无效。
如果我理解正确,你需要“改变 selectedViewController 属性的值”,但你只能选择更多导航控制器,而不是其中的VC。来自有关 selectedViewController 的相同文档:
这个视图控制器就是那个 自定义视图当前显示为 标签栏界面。指定的 视图控制器必须在
viewControllers
数组。分配新的 查看此属性的控制器 更改当前显示的视图 并选择适当的选项卡 标签栏。改变视图 控制器也更新了selectedIndex
相应的财产。 此属性的默认值为nil
。在iPhone OS 3.0及更高版本中,您可以 使用此属性选择任何一个 查看控制器 viewControllers 属性。这个 包括视图控制器 由更多导航管理 控制器及其标签栏项目 在标签栏中看不到。您可以 也可以用它来选择更多 导航控制器本身,这是 可以从 moreNavigationController 属性。 在iPhone OS 3.0之前,你可以 只选择更多导航 控制器和视图子集 标签栏项为的控制器 可见。试图设置这个 视图控制器的属性 标签栏项目不可见没有 效果。
至于解决方法,我想知道更多导航控制器的pushViewController:animated:
方法是否会派上用场?为每个视图提供一个唯一的标记号(您可以在后台与相应的VC关联)。保存最后一个活动VC的标签。
在启动时,在选项卡栏控制器中选择适当的视图。如果视图的标记与前四个标签项的VC无关,则它必须位于更多导航控制器中。找到VC,将其推到更多导航控制器的堆栈,然后直接选择更多导航控制器。
我没有试过这个,但它可能值得一个实验!唯一潜在的问题(可能是一个大问题)是你必须在设置更多导航控制器之后推送VC ,而不是之前。