Сохранение и восстановление для Tabbar без раскадровки
Я использую iOS 6 Preservation and Restoration (без раскадровки), он отлично работает с контроллером навигации, но если я вручную добавляю контроллер Tabbar в главном окне, я не получаю выбранную вкладку.
например.
ListViewController *list = [[ListViewController alloc] initWithNibName:@"ListViewController" bundle:nil];
SettingViewController *setting = [[SettingViewController alloc] initWithNibName:@"SettingViewController" bundle:nil];
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:list];
navigation.restorationIdentifier = @"NavigationControllerID";
self.tabbar = [[UITabBarController alloc] init];
self.tabbar.restorationIdentifier = @"TabbarControllerID";
self.tabbar.viewControllers = @[navigation,setting];
[[_tabbar.tabBar.items objectAtIndex:0] setTitle:NSLocalizedString(@"List", @"comment")];
[[_tabbar.tabBar.items objectAtIndex:1] setTitle:NSLocalizedString(@"Setting", @"comment")];
self.window.rootViewController = self.tabbar;
[self.window makeKeyAndVisible];
в этом случае я получаю первую вкладку, выбранную каждый раз.
+ (UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder
для настройки вида контроллера.
1 ответ
Добавив эти методы в Appdelegate
NSString * const AppDelegateRootVCKey = @ "AppDelegateRootVCKey";
- (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder {
//Adding last tabbar selected index
[coder encodeObject:[NSString stringWithFormat:@"%d",self.tabbar.selectedIndex]forKey:AppDelegateRootVCKey];
}
- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder {
//Setting Last tabbar selected index
NSString *selectedStr = [coder decodeObjectForKey:AppDelegateRootVCKey];
self.tabbar.selectedIndex = [selectedStr intValue];
return YES;
}