我试图让我的应用程序记住应用程序退出前最后一次查看哪个选项卡,以便应用程序在下次启动时打开相同的选项卡。这是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