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

Fre*_*nck 29 cocoa-touch objective-c ios

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

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

查看我的意思是:

在此输入图像描述

chr*_*htz 53

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

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

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

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"])
    [self displayTutorial];
Run Code Online (Sandbox Code Playgroud)

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

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

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"];
Run Code Online (Sandbox Code Playgroud)

该值将保存为您的用户配置文件,这意味着下次检查它时,它将是真的,因此displayTutorial不会被调用.

  • 你忘了"同步". (12认同)
  • 如果检查文档,"此方法会定期自动调用",因此除非程序即将退出或有其他一些禁止调用的现象,否则不需要 (6认同)

Bla*_*zer 33

在你的viewDidLoad中:

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

    //Action here

}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白你的意思:'1'代表你有多少次看到这个动作.你只是设置一个字符串,如果你把它改成任何字符串,包括2,3等,它仍然只会触发一次. (8认同)

Dmi*_*kin 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!
}
Run Code Online (Sandbox Code Playgroud)

一旦用户关闭介绍:

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

if (standardUserDefaults) {
    [standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"];
    [standardUserDefaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)

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