2009-10-26 99 views
10

我试图让我的应用程序记住应用程序退出前最后一次查看哪个选项卡,以便应用程序在下次启动时打开相同的选项卡。这是iPhone手机功能的功能:我该怎么做?如何记住UITabBarController中上次选择的选项卡?

+0

班级的TabBarController的正好被设置为RememberingTabBarController在这最近的问题看看,太:http://stackoverflow.com/questions/1619478/how-can-i-have-my- iphone-app-start-with-a-specific-screen-showing – 2009-10-26 05:51:54

回答

6

在UITabBar的代表,覆盖

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 

和存储项目的指数NSUserDefaults的。下次你的应用程序启动时,从那里读取它,并将其设置回被选中。事情是这样的:

- 首先,您需要设置一个委托为您UITabBar,像这样:

tabBarController.delegate = anObject; 

-in anObject,覆盖didSelectItem

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

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

      [def synchronize]; 
     } 

注意你保存一个NSNumber,如int值不能被直接序列化。 当您再次启动应用程序,它会读取和默认设置的selectedIndex值:

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

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

    tabBarController.selectedIndex = activeTab; 
} 
+0

@luvieere对不起,但您能否详细说明一下示例代码? – quantum 2009-10-26 05:38:26

+0

当然,我只是做到了。 – luvieere 2009-10-26 06:00:53

+0

@luvieere Ooops,你设置NSNumber而不是Int – Shmidt 2012-04-19 18:50:25

0

每当用户选择一个新选项卡时,将选定的选项卡索引存储在NSUserDefaults首选项中。然后,当应用程序开始备份时,从首选项加载该值并手动选择该选项卡。

1

这里是我做到了。 两种方法都在appDelegate中,tabBarController是一个实例变量。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    /* 
    Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
    */ 

    //Remember the users last tab selection 
    NSInteger tabIndex = self.tabBarController.selectedIndex; 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setInteger: tabIndex forKey:@"activeTab"]; 

    if (![userDefaults synchronize]) 
    { 
     NSLog(@"Error Synchronizing NSUserDefaults"); 
    } 

} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    /* 
    Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    */ 

    //Set the tabBarController to the last visted tab 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    int activeTab = [(NSNumber*)[userDefaults objectForKey:@"activeTab"] intValue]; 
    self.tabBarController.selectedIndex = activeTab; 
} 
+0

此代码不适用于我 – 2014-12-10 08:57:36

2

我子类TabBarController和:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.selectedIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"activeTab"]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    [[NSUserDefaults standardUserDefaults] setInteger: self.selectedIndex 
      forKey:@"activeTab"]; 
} 
5

UPDATE

In the UITabBarControllerDelegate's Delegate, overwrite 

目标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. 

夫特3.2

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 
{ 
    print("%i",tabBarController.selectedIndex) 
    return true 
} 
+0

这不是'UITabBarDelegate',它是'UITabBarControllerDelegate'。 – MoLice 2017-02-14 05:52:49

+0

我编辑了我的答案。 – 2017-02-14 06:24:40

0

这里是夫特3溶液。在故事板

import Foundation 
import UIKit 

class RememberingTabBarController: UITabBarController, UITabBarControllerDelegate { 
    let selectedTabIndexKey = "selectedTabIndex" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 

     // Load the last selected tab if the key exists in the UserDefaults 
     if UserDefaults.standard.object(forKey: self.selectedTabIndexKey) != nil { 
      self.selectedIndex = UserDefaults.standard.integer(forKey: self.selectedTabIndexKey) 
     } 
    } 

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
     // Save the selected index to the UserDefaults 
     UserDefaults.standard.set(self.selectedIndex, forKey: self.selectedTabIndexKey) 
     UserDefaults.standard.synchronize() 
    } 
} 
相关问题