仅在iOS中首次启动时显示屏幕
Tweetbot和清除显示的应用程序的第一个开始小教程屏幕上的应用程序如何工作。 只有在第一次启动应用程序时才会popup小教程的屏幕(1次)
如何以及我能做出类似的事情? 任何人都可以把我推向正确的方向吗?
查看我的意思是:
在你的viewDidLoad中:
if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"aValue"]]) { [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"aValue"]; [[NSUserDefaults standardUserDefaults] synchronize]; //Action here }
我假设Xcode你实际上是指iOS。
你需要做的是使用NSUserDefaults
类来存储一个标志,指示用户是否曾经看过教程画面。
当你的应用程序第一次加载(或在你想决定是否显示教程屏幕),做这样的事情:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"]) [self displayTutorial];
这将检查当前用户保存的NSUserDefaults是否存在一个名为“hasSeenTutorial”的值。 由于它不存在,它将调用displayTutorial
。 displayTutorial
引用您创build教程视图的方法。 你可以弄清楚那个部分
然后,一旦用户closures了教程屏幕:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"];
该值将被保存为您的用户configuration文件,这意味着下一次检查它,这将是真实的,所以displayTutorial
不会被调用。
当然,如果我们想告诉用户更新后的function(不仅是第一次启动的应用程序),下面的解决scheme可能是合适的。
在你的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! }
一旦用户closures了介绍:
NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; if (standardUserDefaults) { [standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"]; [standardUserDefaults synchronize]; }
在这种情况下,存储在您的standardUserDefaults中的应用程序捆绑软件版本将仅在更新后与当前捆绑软件版本不同,并且仅在首次启动时显示一次。
初始化你的用户默认使用BOOL,一些名为instructionsSeen
(或任何你想要的),并将其设置为NO
在您的应用程序委托的初始化方法..在您的应用程序,testing此值,如果它NO
显示您的教程屏幕。 作为显示和显示此屏幕的一部分,请将instructionsSeen
设置为YES
,并将其存储为默认值。
这样,除非用户再次卸载并安装应用程序,否则演示屏幕只会在首次启动时显示。
你也可以显示less量的启动演示(比如说3)。 在这种情况下,不要使用BOOL
使用一个数字,而是增加它。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if (![defaults objectForKey:@"firstRun"]) { [defaults setObject:[NSDate date] forKey:@"firstRun"]; [self displayTutorial]; }
AppDelegate中的Xamarin.iOS版本:
UIStoryboard storyboard = UIStoryboard.FromName("Main", null); if (NSUserDefaults.StandardUserDefaults.BoolForKey ("hasSeenTutorial") == false) { UIViewController vc = storyboard.InstantiateViewController ("StartPageViewController"); this.Window.RootViewController = vc; } else { UIViewController vc = storyboard.InstantiateViewController ("NonStartPageViewController"); this.Window.RootViewController = vc; } this.Window.MakeKeyAndVisible ();
在我的StartPageViewController中,我有一个将NSUserDefaults设置为true的button,所以下次运行时,它将从NonStartPageViewController开始:
partial void RegisterButton_TouchUpInside (UIButton sender) { NSUserDefaults.StandardUserDefaults.SetBool(true,"hasSeenTutorial"); NSUserDefaults.StandardUserDefaults.Synchronize(); }
Swift版本:
if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) { //Tutorial part NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial") }
每个人都在做这个更复杂,更大的工作。
在ViewDidLoad中:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLoadKey"]) { self.imageView.hidden = YES; }else{ self.imageView.hidden = NO; [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"FirstLoadKey"]; [[NSUserDefaults standardUserDefaults]synchronize]; }