Вы можете установить делегат приложения также как делегат UITabBarController
, и когда выбран вкладка, вы можете записать выделение в [NSUserDefaults standardDefaults]
в виде целого числа (выбранный индекс контроллера панели вкладок).
ли это:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
{
[[NSUserDefaults standardDefaults] setInteger:tabBarController.selectedIndex forKey:SelectedTabIndex];
}
На старте, вы можете загрузить выбранный индекс из по умолчанию с помощью -integerForKey:
, и он будет по умолчанию к нулю, если значение не было найдено для этого ключа, или если ключ не был анализируется как целое число.
Я оберните доступ к сохраненному индексу с методом:
- (NSUInteger)tabIndexToSelect;
{
return [[NSUserDefaults standardDefaults] integerForKey:SelectedTabIndex]; // defaults to zero
}
записка о NSUserDefaults
.. пока они не синхронизированы, они не выгружаются на диск для персистенции. Вы заметите это, если вы отлаживаете и завершаете приложение, а iOS автоматически не синхронизирует настройки вашего приложения по умолчанию. Вы можете принудительно синхронизировать, но я предпочитаю оставить его, пока он не будет выполнен автоматически. Чтобы помочь в случаях, когда пользователь переключает вкладку, а затем завершает работу, добавьте синхронизацию в - (void)applicationWillResignActive:(UIApplication *)application
и/или - (void)applicationWillTerminate:(UIApplication *)application
.
Ссылаясь на порядок вкладок, а не на выбранный индекс (мой плохо!).
Вы можете просто установить для каждой из элементов панели табуляции уникальный номер тега. (используйте перечисление в своем делете приложения, чтобы они были уникальными). Тогда вы можете сделать это:
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;
{
NSArray *tabBarTagOrder = [tabBarController.tabBar.items valueForKey:@"tag"];
[[NSUserDefaults standardDefaults] setObject:tabBarTagOrder forKey:TabTagOrder];
}
Чтобы восстановить порядок на старте, вы можете вручную организовать панель вкладок элементов в порядке восстановленного от дефолтов, а затем установите items
свойство UITabBar
непосредственно.
Спасибо, это близко к тому, что я ищу. То, что я имел в виду, это восстановление порядка вкладок после его настройки. –
+1 для '[NSArray valueForKey]', очень аккуратный! Обратите внимание, однако, что это '[NSUserDefaults standardUserDefaults]', а не '[NSUserDefaults standardDefaults]'. – herzbube