私は、アプリケーションが終了する前にどのタブが最後に表示されたのかを記憶させようとしているので、次回起動時に同じタブを開くようにしています。これはiPhoneの電話機能の機能です:これはどのようにすることができますか?UITabBarControllerの最後に選択したタブを覚えておくには?
答えて
、
- (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;
}
ユーザが新しいタブを選択するたびに、選択したタブインデックスをNSUserDefaultsプリファレンスに保存します。その後、アプリケーションが起動したら、設定からその値を読み込み、そのタブを手動で選択します。 UITabBarのデリゲートで
は、ここで私はそれをやった方法です。 両方のメソッドは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;
}
このコードは私のために働いていません –
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"];
}
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
}
これは 'UITabBarDelegate'ではなく、' UITabBarControllerDelegate'です。 – MoLice
私は自分の答えを編集しました。 –
はスウィフト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()
}
}
- 1. 剣道グリッド - 選択した行を覚えておく方法?
- 2. ウェブページを最後に開いたファイルディレクトリを覚えておくには?
- 3. 最後に選択したコンボボックスの項目を覚えています
- 4. サブミット/リフレッシュ後に最後に使用したタブを覚えていますか?
- 5. Android datepickerが最後に選択した日付を覚えていない
- 6. VBA userform最後の選択を覚えているラジオボタン
- 7. OpenFileDialogを%temp%にしたことを覚えておくには?
- 8. Yii2はsearchFormをサブミットした後に覚えておきます。
- 9. ドロップダウンメニューの最後の状態を覚えておくためのJquery Cookie
- 10. リスト内のラジオボタンの選択状態を覚えておいてください
- 11. Outlookの送信済みアイテムのフォルダを特定し、最後に選択したフォルダを覚えています
- 12. カスタムセンターボタンを使用してuiTabBarControllerのタブを選択する方法
- 13. ページのリダイレクト後に最後に選択したタブを維持する
- 14. 最後のセッションを覚えておくためにメモ帳++を設定しますか?
- 15. UITabbarController最初に選択されたタブが奇妙に動作しています
- 16. UITabBarControllerのUINavigationController - タブ選択のトップに戻る
- 17. ページの更新時にcssクラスを覚えておくには?
- 18. ドロップダウン選択を覚えているクッキー
- 19. Silverlightのナビゲーション:ページの状態を覚えておくには?
- 20. ドロップダウンを覚えておく文書クッキー
- 21. UITabBarControllerはコードでタブを選択できますか?
- 22. 送信後に開くタブを選択します。
- 23. DataGridViewで選択した行を覚えている
- 24. spring mvcドロップダウンで選択したオプションを覚えている
- 25. PHPフォームの送信時に使用された最後のタブを覚えている方法は?
- 26. ノックアウトチェックバインド最後に選択した要素を取り除く
- 27. リダイレクトが発生したときにセッションを覚えておく方法は?
- 28. フォームエラーの場合は、選択したタブのままにしておいてください。
- 29. 他のタブを選択しても最後のタブ区画が常にアクティブなのはなぜですか?
- 30. Fullcalendar選択した覚えている日
に
RememberingTabBarController
にごTabBarControllerのクラスを設定します。http://stackoverflow.com/questions/1619478/how-can-i-have-my- iphone-app-start-with-a-specific-screen-showing –