如何记住UITabBarController中最后选择的选项卡?

qua*_*tum 11 iphone sdk tabs uitabbar

我正在尝试让我的应用记住在应用退出之前最后一次查看哪个标签,以便应用在下次启动时打开到同一个标签.这是iPhone手机功能的功能:我该怎么做?

luv*_*ere 8

在UITabBar的委托中,覆盖

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
Run Code Online (Sandbox Code Playgroud)

并在NSUserDefaults中存储项目的索引.下次您的应用程序启动时,从那里读取它,并将其重新设置为被选中.像这样的东西:

- 首先,你要为你的UITabBar设置一个委托,如下所示:

tabBarController.delegate = anObject;
Run Code Online (Sandbox Code Playgroud)

-in anObject,覆盖didSelectItem:

       - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
        {
          NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

          [def setInteger: [NSNumber numberWithInt: tabBarController.selectedIndex]
 forKey:@"activeTab"];

          [def synchronize];
        }
Run Code Online (Sandbox Code Playgroud)

请注意,您保存NSNumber,因为int值无法直接序列化.当您再次启动应用程序时,它将读取并设置默认值中的selectedIndex值:

- (void)applicationDidFinishLaunchingUIApplication *)application {  
   NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

   int activeTab = [(NSNumber*)[def objectForKey:@"activeTab"] intValue];

   tabBarController.selectedIndex = activeTab;
} 
Run Code Online (Sandbox Code Playgroud)


Nim*_*ipa 7

UPDATE

In the UITabBarControllerDelegate's Delegate, overwrite
Run Code Online (Sandbox Code Playgroud)

目标C.

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
NSLog(@"%lu",self.tabBarController.selectedIndex);
return YES;
}

In this delegate method you will get last selected index.
Run Code Online (Sandbox Code Playgroud)

Swift 3.2

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
{
    print("%i",tabBarController.selectedIndex)
    return true
}
Run Code Online (Sandbox Code Playgroud)