在我的iPhone应用程序,以恢复先前查看选项卡,在启动我设置的setSelectedIndex:(也试着setSelectedViewController:根据文档,但无济于事)
这适用于iPhone OS 3.0 - 但是在OS 2.x的所选择的指数大于3(第一4个标签)更大的不切换到所需的视图。 这是由苹果记录在这里: 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 ..){}块 - 希望这种技术可以帮助别人。
也许这将有所帮助。 我所做的就是保存了所选标签栏项目的索引。 当应用程序启动予检查以查看是否该数大于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]];
}
}
我有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];
该文档的UITabBarController有关的selectedIndex拼出来:
此属性代表标称中的索引的阵列viewControllers
属性。 然而, 如果所选择的视图控制器是目前更多导航控制器,该属性包含值NSNotFound
。 设置这个属性改变所选视图控制器到所述一个中指定的索引在viewControllers
阵列。 要选择更多的导航控制器本身,你必须改变的值selectedViewController
属性。
在3.0版本之前,iPhone OS的版本,这个属性体现了只有选定的标签栏项目的索引。 试图将此值设置为一个视图控制器的索引不在标签栏可见,而是由多个导航控制器管理, 没有效果 。
如果我理解正确的话,你需要“改变selectedViewController属性的值”,而不是,但你只会得到尽可能选择在它的更导航控制器,而不是VC。 从有关selectedViewController是同一个文档:
此视图控制器是其自定义视图当前由选项卡栏界面中显示的一个。 指定的视图控制器必须中viewControllers
阵列。 分配一个新的视图控制器此属性更改当前显示的视图,并且还选择了在标签栏的适当标签。 更改视图控制器还更新selectedIndex
相应属性。 此属性的默认值是nil
。
在iPhone OS 3.0及更高版本,你可以使用这个属性来选择任何在viewControllers属性视图控制器。 这包括由多个导航控制器,其选项卡栏项目不在标签栏可见管理视图控制器。 你也可以用它来选择更多导航控制器本身,这可从moreNavigationController财产。 在此之前iPhone OS 3.0,您可以只选取多个导航控制器和视图控制器,其标签栏项目是可见的子集。 试图将此属性设置为一个视图控制器,其标签栏项目是不可见的是没有效果的。
至于解决方法,我想知道更多的导航控制器的pushViewController:animated:
方法将在这里派上用场? 给每个视图的唯一标签号码(您可以与在幕后适当的VC关联)。 除哪个VC是最后一个活动标签。
在启动时,选择选项卡栏控制器相应的视图。 如果视图的标签不符合风险投资的前四个选项卡项目相关联的,它必须是更导航控制器内。 找到VC,将其推到更多的导航控制器的堆栈,然后选择更多导航控制器顾左右而言他。
我没有试过,但它可能是值得的实验! 唯一潜在的疑难杂症(它可能是一个大问题),就是你要努力的是VC的更多导航控制器后安装,而不是之前。