私は、アプリケーションが終了する前にどのタブが最後に表示されたのかを記憶させようとしているので、次回起動時に同じタブを開くようにしています。これは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. Android datepickerが最後に選択した日付を覚えていない
- 3. サブミット/リフレッシュ後に最後に使用したタブを覚えていますか?
- 4. Yii2はsearchFormをサブミットした後に覚えておきます。
- 5. ドロップダウンメニューの最後の状態を覚えておくためのJquery Cookie
- 6. ページのリダイレクト後に最後に選択したタブを維持する
- 7. カスタムセンターボタンを使用してuiTabBarControllerのタブを選択する方法
- 8. 最後のセッションを覚えておくためにメモ帳++を設定しますか?
- 9. ドロップダウン選択を覚えているクッキー
- 10. UITabBarControllerのUINavigationController - タブ選択のトップに戻る
- 11. Silverlightのナビゲーション:ページの状態を覚えておくには?
- 12. ドロップダウンを覚えておく文書クッキー
- 13. DataGridViewで選択した行を覚えている
- 14. spring mvcドロップダウンで選択したオプションを覚えている
- 15. HTML最後に選択したドロップダウン値を選択していますか?
- 16. Fullcalendar選択した覚えている日
- 17. UITabBarControllerはコードでタブを選択できますか?
- 18. UITabBarControllerタブを選択する前に「Now Loading」を追加しますか?
- 19. 最後に選択されたラジオボタンの選択
- 20. データベースなしの選択肢を覚えているasp.net mvc
- 21. UITabbarController - のiOS 5.0とiOS 4.3にすべてのタブの選択を解除する方法だけでなく
- 22. 登録時に覚えておいてください
- 23. 最後の3つの子を選択してください
- 24. 最後の別のペアを選択してください
- 25. jComboBoxは、選択したアイテムを選択したときに選択項目を最初に選択します
- 26. ページを更新した後でもフォームの入力データを覚えておく方法は?
- 27. ループでOpenCVを使って以前の画像を覚えておくには?
- 28. Jqueryオートコンプリート:最初の項目を選択して検索ボックスにフォーカスを置くためにタブを使用
- 29. ASP.NETでポストバックが発生した後に最初のタブを選択しないようにしますか?
- 30. 最後に選択したアイテムをコンボボックスに保存する
に
RememberingTabBarController
にごTabBarControllerのクラスを設定します。http://stackoverflow.com/questions/1619478/how-can-i-have-my- iphone-app-start-with-a-specific-screen-showing –