应用程序终止时如何保存标签栏顺序?

时间:2010-07-26 21:24:21

标签: iphone objective-c cocoa-touch uitabbarcontroller

以下示例: http://www.raddonline.com/blogs/geek-journal/iphone-sdk-uitabbarcontroller-how-to-save-user-customized-tab-order/

在iOS4中不起作用。

我希望能够在关闭应用程序时保存选项卡的顺序。

2 个答案:

答案 0 :(得分: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


参考标签顺序,而不是选择索引(我的不好!)。

您只需使用唯一的标签编号设置每个标签栏项目即可。 (在您的app委托中使用枚举以保持它们的唯一性)。然后你可以这样做:

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed;
{
    NSArray *tabBarTagOrder = [tabBarController.tabBar.items valueForKey:@"tag"];
    [[NSUserDefaults standardDefaults] setObject:tabBarTagOrder forKey:TabTagOrder];
}

要在启动时恢复订单,您可以按默认值恢复的顺序手动整理标签栏项目,然后直接设置items的{​​{1}}属性。

答案 1 :(得分:0)