2010-07-26 4 views

ответ

3

Вы можете установить делегат приложения также как делегат 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 непосредственно.

+0

Спасибо, это близко к тому, что я ищу. То, что я имел в виду, это восстановление порядка вкладок после его настройки. –

+1

+1 для '[NSArray valueForKey]', очень аккуратный! Обратите внимание, однако, что это '[NSUserDefaults standardUserDefaults]', а не '[NSUserDefaults standardDefaults]'. – herzbube