如何才能显示首次启动的视图?

我用故事板创build了一个使用Xcode 4.5的应用程序。 第一次启动应用程序时,我希望初始视图控制器显示必须接受的条款和条件才能继续。 之后,我希望应用程序启动并跳过第一个视图控制器,然后转到第二个视图控制器。

我知道我必须使用NSUserDefaults类和一些效果︰if([[NSUserDefaults standard …] boolForKey:@“iHaveAcceptedTheTerms”])

但是我从来没有用过这个类,也不知道如何实现这个代码。 有人可以分享如何做到这一点的具体细节?

你放进你的AppDelegate中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //first-time ever defaults check and set if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES) { [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"]; } 

然后你在你的rootViewController中实现条款和条件以及接受它的方法。 你将不得不检查条款是否被接受,例如这样:

 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){ //proceed with app normally } else{ //show terms } 

接受后,以下代码将更改默认设置:

  if(termsaccepted){ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"]; } 

为了保持这个问题是最新的,这里是一个被接受的答案的Swift版本。


步骤1

在您的App Delegate中 ,添加以下function。

 func applicationDidFinishLaunching(application: UIApplication) { if !NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") { NSUserDefaults.standardUserDefaults().setBool(false, forKey: "TermsAccepted") } } 

如果这是第一次启动,这将基本上将您的TermsAccepted Bool设置为false(因为Bools默认为false )。


第2步

在你的根视图控制器(启动你的应用程序时加载的视图控制器)中,你必须有办法看看这些条款是否被接受,并相应地采取行动。

添加以下function。

 override func viewDidAppear(animated: Bool) { if NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") { // Terms have been accepted, proceed as normal } else { // Terms have not been accepted. Show terms (perhaps using performSegueWithIdentifier) } } 

第3步

一旦用户接受您的条件,您想要将您的TermsAccepted Bool更改为true 。 因此,在处理条款接受的方法的主体中,添加以下行。

 NSUserDefaults.standardUserDefaults().setBool(true, forKey: "TermsAccepted") 

我希望这有帮助!

卢瓦克

Swift 3版本

在AppDelegate.swift中:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { if !UserDefaults.standard.bool(forKey: "Walkthrough") { UserDefaults.standard.set(false, forKey: "Walkthrough") } } 

在根视图控制器中:

 override func viewDidLoad() { super.viewDidLoad() if UserDefaults.standard.bool(forKey: "Walkthrough") { // Terms have been accepted, proceed as normal } else { // Terms have not been accepted. Show terms (perhaps using } } 

当条款已被接受,或教程演练完成时:

 UserDefaults.standard.set(true, forKey: "Walkthrough") 

在你的第一个视图或委托中,它会看起来像这样:

 NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults]; BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"]; if (!isAccepted) { [self presentViewController:YOUR_TERMS_CONTROLLER animated:YES completion:nil]; } else { [self.navigationController pushViewController:YOUR_NORMAL_CONTROLLER animated:YES]; } 

不要忘记保存你的条款控制器上的用户响应:

 [standardUserDefaults setBool:YES forKey:@"iHaveAcceptedTheTerms"];