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

jac*_*300 13 xcode ios

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

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

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

Loi*_*all 14

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


步骤1

App Delegate中,添加以下功能.

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

如果这是第一次启动,这将基本上将您的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)
    }
}
Run Code Online (Sandbox Code Playgroud)

第3步

用户接受您的条件后,您希望将TermsAccepted Bool 更改为true.因此,在处理术语接受的方法体中,添加以下行.

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "TermsAccepted")
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

卢瓦克


Nig*_*der 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"];
}
Run Code Online (Sandbox Code Playgroud)

然后在rootViewController中实现条款和条件以及接受它的方法.您必须检查条款是否被接受,例如:

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

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

 if(termsaccepted){
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"];
}
Run Code Online (Sandbox Code Playgroud)

  • 也许这超出了问题的范围.试试[这一个](http://stackoverflow.com/questions/8623524/show-view-from-storyboard-chain?rq=1)或[这一个](http://stackoverflow.com/questions/6231676/例如,我是如何开始一个新的视图,一个在购买之后制造的,以及如何制造的?rq = 1). (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")
    }
}
Run Code Online (Sandbox Code Playgroud)

在根视图控制器中:

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 
    }
}
Run Code Online (Sandbox Code Playgroud)

接受术语或完成教程演练后:

UserDefaults.standard.set(true, forKey: "Walkthrough")
Run Code Online (Sandbox Code Playgroud)