2009-10-26 30 views
10

私は、アプリケーションが終了する前にどのタブが最後に表示されたのかを記憶させようとしているので、次回起動時に同じタブを開くようにしています。これはiPhoneの電話機能の機能です:これはどのようにすることができますか?UITabBarControllerの最後に選択したタブを覚えておくには?

+0

RememberingTabBarControllerにごTabBarControllerのクラスを設定します。http://stackoverflow.com/questions/1619478/how-can-i-have-my- iphone-app-start-with-a-specific-screen-showing –

答えて

6

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

を上書きし、NSUserDefaultsに項目のインデックスを格納します。次回は、あなたのアプリが起動し、そこから読んで、選択された状態に戻します。このような何か:

-first、あなたはこのように、あなたのUITabBarのデリゲートを設定します:

tabBarController.delegate = anObject; 

anObject-in、didSelectItemを上書き:

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

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

      [def synchronize]; 
     } 

注意していることのようにNSNumberを保存すると値を直接シリアル化することはできません。 再度アプリを起動すると、それはデフォルトからのselectedIndex値を読み取って、設定します:

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

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

    tabBarController.selectedIndex = activeTab; 
} 
+0

@luvieere申し訳ありませんが、ちょっとしたサンプルコードで詳しいことができますか? – quantum

+0

確かに、私はそれをしました。 – luvieere

+0

@luvieere Ooops、Int – Shmidt

0

ユーザが新しいタブを選択するたびに、選択したタブインデックスをNSUserDefaultsプリファレンスに保存します。その後、アプリケーションが起動したら、設定からその値を読み込み、そのタブを手動で選択します。 UITabBarのデリゲートで

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

このコードは私のために働いていません –

2

Iは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

+0

私は自分の答えを編集しました。 –

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() 
    } 
} 
関連する問題