仅在iOS中首次启动时显示屏幕

时间:2012-02-26 03:52:17

标签: objective-c ios cocoa-touch

Tweetbot和Clear show在应用程序的第一次启动时,一个小教程屏幕应用程序如何工作。只有第一次启动应用程序时才弹出带有小教程的屏幕(1次)

我如何以及如何做出类似的事情?任何人都可以把我推向正确的方向吗?

查看我的意思是:

enter image description here

8 个答案:

答案 0 :(得分:53)

我假设Xcode你实际上是指iOS。

您需要做的是使用NSUserDefaults类来存储一个标志,指示用户之前是否已经看过教程屏幕。

当您的应用首次加载时(或者您想决定是否显示教程屏幕时),请执行以下操作:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"])
    [self displayTutorial];

这将为当前用户检查已保存的NSUserDefaults,以获取名为“hasSeenTutorial”的值,该值尚不存在。由于它不存在,它将调用displayTutorialdisplayTutorial指的是创建教程视图的方法。你可以找出那个部分。

然后,一旦用户关闭教程屏幕:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"];

该值将保存为您的用户个人资料,这意味着下次检查时,这将是真的,因此不会调用displayTutorial

答案 1 :(得分:33)

在viewDidLoad中:

if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults]
                                objectForKey:@"aValue"]]) {
    [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"aValue"];
    [[NSUserDefaults standardUserDefaults] synchronize];

    //Action here

}

答案 2 :(得分:9)

当然,如果我们想在更新后告诉用户有关功能的信息(不仅是第一次推出的应用),下面的解决方案也可能适用。

在viewDidLoad中:

NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSString *previousBundleVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"PreviousBundleVersion"];

if (![currentBundleVersion isEqualToString:previousBundleVersion] ) {
     // Here you can initialize your introduction view and present it!
}

用户关闭简介后:

NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];    
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"];
    [standardUserDefaults synchronize];
}

在这种情况下,存储在standardUserDefaults中的应用包版本将仅在更新后与当前包版本不同,并且仅在首次启动时显示一次。

答案 3 :(得分:3)

使用BOOL初始化您的用户默认值,称为instructionsSeen(或任何您想要的),并在App委托的初始化方法中将其设置为NO。在您的应用中,测试此值,如果它是NO显示您的教程屏幕。在显示和显示此屏幕时,请将instructionsSeen设置为YES并将其存储为默认值。

这样,演示屏幕只会在首次启动时显示,除非用户再次卸载并安装应用程序。

您还可以显示少量发布的演示(例如3)。在这种情况下,请不要使用BOOL使用数字而是将其递增。

答案 4 :(得分:2)

AppDelegate中的Xamarin.iOS版本:

a

在我的StartPageViewController中,我有一个按钮,它将NSUserDefaults设置为true,因此下次运行时,它将从NonStartPageViewController开始:

Num

答案 5 :(得分:1)

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"]) {
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
    [self displayTutorial];
}

答案 6 :(得分:0)

Swift版本:

if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) {
            //Tutorial part
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial")
        }

答案 7 :(得分:0)

每个人都在使这个变得更加复杂和虚张声势......简单完整的解决方案。

在ViewDidLoad中:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLoadKey"]) {
    self.imageView.hidden = YES;
}else{
    self.imageView.hidden = NO;
    [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"FirstLoadKey"];
    [[NSUserDefaults standardUserDefaults]synchronize];
}