我使用带有故事板的 Xcode 4.5 构建了一个应用程序。应用程序第一次启动时,我希望初始视图控制器显示必须接受才能继续的条款和条件。之后,我希望应用程序启动并跳过第一个视图控制器并转到第二个。
我知道我必须使用 NSUserDefaults 类和一些效果: if ([[NSUserDefaults standard...] boolForKey:@"iHaveAcceptedTheTerms"])
但我以前从未使用过这个类,也不知道如何实现这段代码。有人可以分享如何做到这一点的细节吗?
为了使这个问题保持最新,这里是已接受答案的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")
我希望这有帮助!
洛伊克
你在你的 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"];
}
斯威夫特 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"];