我試圖讓我的應用程序記住應用程序退出前最後一次查看哪個選項卡,以便應用程序在下次啓動時打開相同的選項卡。這是iPhone手機功能的功能:我該怎麼做?如何記住UITabBarController中上次選擇的選項卡?
回答
在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;
}
每當用戶選擇一個新選項卡時,將選定的選項卡索引存儲在NSUserDefaults首選項中。然後,當應用程序開始備份時,從首選項加載該值並手動選擇該選項卡。
這裏是我做到了。 兩種方法都在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;
}
此代碼不適用於我 – 2014-12-10 08:57:36
我子類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 2017-02-14 05:52:49
我編輯了我的答案。 – 2017-02-14 06:24:40
這裏是夫特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. jquery記住選項選擇
- 3. 記住選擇菜單選項選項
- 4. 如何禁用UITabBarController中的選項卡?
- 5. 如何記住選擇標籤中的多個選定選項?
- 6. 如果上述選項卡中選擇
- 7. 如何使用自定義中心按鈕選擇uiTabBarController中的選項卡
- 8. Xcode故事板選項卡式應用程序(UITabBarController) - 告訴選擇選項卡
- 9. 的UITabBarController - 檢測選項卡時未選擇
- 10. 警告:「的UITabBarController」可能不響應「選擇選項卡:」
- 11. jQuery UI選項卡 - 如何選擇懸停的選項卡
- 12. 如何限制UITabBarController上的選項卡數量?
- 13. 當選擇UITabBarController更多選項卡時檢測到
- 14. 在UITabBarController選項卡選擇之前添加「現在載入」?
- 15. 如何在每次選擇選項卡時加載我的rootview?
- 16. 如何在選擇其他選項卡時激活選項卡?
- 17. 使用PHP $ _POST記住選擇框中的選項?
- 18. Javascript記住從下拉菜單中選擇的選項值
- 19. jQuery UI選項卡 - 記住沒有cookie的最後一個選項卡?
- 20. 在asp.net上的jquery選項卡選擇
- 21. 更改UITabBarController選項卡未選中時選項卡圖標顏色
- 22. JQuery選項卡,選項卡上選擇觸發事件
- 23. CakePhp記住我的選項
- 24. 如何在複選框選擇上禁用PrimeFaces選項卡
- 25. 如何強制選擇特定的jquery-ui選項卡索引或強制在特定選項卡上選擇「選項卡選擇」事件?
- 26. 在jquery選項卡上使用選擇?
- 27. Cookie記住下拉選擇
- 28. TabLayout選定的指標 - 必須選擇選項卡兩次
- 29. 如何在Google Chrome DevTools中創建默認選項卡或讓Chrome記住選項卡位置?
- 30. 如何停止在Tkinter EntryBox上選擇文本的選項卡
班級的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