13

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

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

但我以前从未使用过这个类,也不知道如何实现这段代码。有人可以分享如何做到这一点的细节吗?

4

4 回答 4

14

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


步骤1

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

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

如果这是第一次启动,这实际上会将您的 TermsAccepted Bool 设置为 false(因为默认情况下 Bools 为false)。


第2步

在您的根视图控制器(启动应用程序时加载的视图控制器)中,您必须有办法查看条款是否已被接受并采取相应措施。

添加以下功能。

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")

我希望这有帮助!

洛伊克

于 2015-07-13T15:02:37.170 回答
10

你在你的 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"];
}
于 2012-10-14T00:15:52.020 回答
5

斯威夫特 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")
于 2016-11-22T23:17:24.893 回答
4

在您的第一个视图或委托中,它将如下所示:

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"];
于 2012-10-14T00:14:38.030 回答