Как я могу показать представление только при первом запуске?
Я построил приложение, используя Xcode 4.5 с раскадными версиями. При первом запуске приложения я хочу, чтобы контроллер начального представления отображался с условиями, которые должны быть приняты для продолжения. После этого я хочу, чтобы приложение запускалось и пропускало первый контроллер представления и переходило ко второму.
Я знаю, что мне нужно использовать класс NSUserDefaults и что-то вроде: if ([[NSUserDefaults standard...] boolForKey: @ "iHaveAcceptedTheTerms" ])
Но я никогда раньше не использовал этот класс и не знаю, как реализовать этот код. Может ли кто-нибудь поделиться спецификой того, как это сделать?
Ответы
Ответ 1
Вы добавили свой 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
В интересах поддержания актуальности этого вопроса, вот версия принятого ответа Swift.
ШАГ 1
В своем делеге приложения добавьте следующую функцию.
func applicationDidFinishLaunching(application: UIApplication) {
if !NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") {
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "TermsAccepted")
}
}
По умолчанию этот параметр будет установлен в 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")
Надеюсь, это поможет!
Лоик
Ответ 3
версия 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")
Ответ 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"];