如何才能在首次发布时显示视图?

时间:2012-10-14 00:07:50

标签: ios xcode

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

我知道我必须使用NSUserDefaults类以及以下内容:       if([[NSUserDefaults standard ...] boolForKey:@“iHaveAcceptedTheTerms”])

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

4 个答案:

答案 0 :(得分: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")

我希望这有帮助!

卢瓦克

答案 1 :(得分: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"];
}

答案 2 :(得分:5)

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

答案 3 :(得分: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"];