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,然后清除所有用户默认值,如果您想在此时重置它。

使用 NSUserDefaultstag 组合

使用名为 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]];
}