UITabBarController 检查选项卡是否是第一次选择
UITabBarController check if tab selected for the first time
这听起来很简单。我想检查是否第一次选择了选项卡。这适用于所有选项卡。 NSUserDefaults
或任何解决方案都应该有效。
我认为你应该像这样抓住 UITabBarControllerDelegate
:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)selectingViewController {
if (![selectingViewController isViewLoaded]) {
//this is the first time we meet
}
return YES;
}
祝你好运!
p/s:确保之前 selectingViewController
没有调用 [UIViewController view]
(例如:调用预加载 UIWebView
:D)
在您的 UITabBarDelegate 中,您可以这样做:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
[[NSUserDefaults standardUserDefaults] setValue:@(YES) forKey:item.title];
[[NSUserDefaults standardUserDefaults] synchronize];
}
然后,当您想查看它是否被选中时,只需使用类似这样的函数查看用户默认值:
- (BOOL)didSelectItemWithTitle:(NSString *)title {
NSNumber *value = [[NSUserDefaults standardUserDefaults] valueForKey:title];
return value != nil;
}
您可以观察 UIApplicationDidEnterBackgroundNotification,然后清除所有用户默认值,如果您想在此时重置它。
使用 NSUserDefaults 和 tag 组合
使用名为 isFirstRun 的方法创建 UITabBarItem 类别
不要忘记为每个要跟踪的 UITabBarItem 设置标签;
例如:
UITabBarItem *bar1 = [[UITabBarItem alloc] init];
UITabBarItem *bar2 = [[UITabBarItem alloc] init];
UITabBarItem *bar3 = [[UITabBarItem alloc] init];
bar1.tag = 1001;
bar2.tag = 1002;
bar2.tag = 1003;
if([bar1 isFirstRun]) {
//to something
[bar1 setDidRun:YES];
}
UITabBarItem+FirstRun.h
#import "UITabBarItem.h"
@interface UITabBarItem (FirstRun)
- (BOOL) isFirstRun;
- (void) setDidRun:(BOOL) flag;
@end
UITabBarItem+FirstRun.m
#import "UITabBarItem+FirstRun.h"
@implementation UITabBarItem (FirstRun)
- (BOOL) isFirstRun {
return return ![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"tab%ldDidRun", self.tag]];
}
- (void) setDidRun:(BOOL) flag {
[[NSUserDefaults standardUserDefaults] setBool:flag forKey:[NSString stringWithFormat:@"tab%ldDidRun", bar.tag]];
}
这听起来很简单。我想检查是否第一次选择了选项卡。这适用于所有选项卡。 NSUserDefaults
或任何解决方案都应该有效。
我认为你应该像这样抓住 UITabBarControllerDelegate
:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)selectingViewController {
if (![selectingViewController isViewLoaded]) {
//this is the first time we meet
}
return YES;
}
祝你好运!
p/s:确保之前 selectingViewController
没有调用 [UIViewController view]
(例如:调用预加载 UIWebView
:D)
在您的 UITabBarDelegate 中,您可以这样做:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
[[NSUserDefaults standardUserDefaults] setValue:@(YES) forKey:item.title];
[[NSUserDefaults standardUserDefaults] synchronize];
}
然后,当您想查看它是否被选中时,只需使用类似这样的函数查看用户默认值:
- (BOOL)didSelectItemWithTitle:(NSString *)title {
NSNumber *value = [[NSUserDefaults standardUserDefaults] valueForKey:title];
return value != nil;
}
您可以观察 UIApplicationDidEnterBackgroundNotification,然后清除所有用户默认值,如果您想在此时重置它。
使用 NSUserDefaults 和 tag 组合
使用名为 isFirstRun 的方法创建 UITabBarItem 类别不要忘记为每个要跟踪的 UITabBarItem 设置标签; 例如:
UITabBarItem *bar1 = [[UITabBarItem alloc] init];
UITabBarItem *bar2 = [[UITabBarItem alloc] init];
UITabBarItem *bar3 = [[UITabBarItem alloc] init];
bar1.tag = 1001;
bar2.tag = 1002;
bar2.tag = 1003;
if([bar1 isFirstRun]) {
//to something
[bar1 setDidRun:YES];
}
UITabBarItem+FirstRun.h
#import "UITabBarItem.h"
@interface UITabBarItem (FirstRun)
- (BOOL) isFirstRun;
- (void) setDidRun:(BOOL) flag;
@end
UITabBarItem+FirstRun.m
#import "UITabBarItem+FirstRun.h"
@implementation UITabBarItem (FirstRun)
- (BOOL) isFirstRun {
return return ![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"tab%ldDidRun", self.tag]];
}
- (void) setDidRun:(BOOL) flag {
[[NSUserDefaults standardUserDefaults] setBool:flag forKey:[NSString stringWithFormat:@"tab%ldDidRun", bar.tag]];
}