2016-11-01 7 views
2

Я разрабатываю экран прохода, который должен появляться только в первый раз, когда пользователь открывает приложение. Пока я создал страницу прокрутки и PageViewController. Смотрите картину: enter image description hereКак обнаружить первое приложение, запускающее и отображающее экран инструкции?

Я прочитал много подобных вопросов здесь, и я понял, что я должен использовать

UserDefaults() 

внутри AppDelegate, но я не понимаю, как использовать класс и раскадровки имена внутри кода. В принципе, когда приложение открывается в первый раз, на экране появляется экран PageViewController, и когда пользователь нажимает кнопку запуска, находящуюся на WalkThroughScreen, он уволит страницу учебника, и приложение запустится.

Я попробовал этот код:

if let isFirstStart = UserDefaults.standard.value(forKey: "isFirstLaunch") as? Bool { 
    if defaults.bool(forKey: "isFirstLaunch") { 
    defaults.set(false, forKey: "isFirstLaunch") 
    let mainStoryboard = UIStoryboard(name: "WalkThroughScreen", bundle: Bundle.main) 
    let vc : WalkThroughScreen = mainStoryboard.instantiateViewController(withIdentifier: "PageViewController") as! WalkThroughScreen 
    self.present(vc, animated: true, completion: nil) 
    } 

Я уверен, что это полный беспорядок, потому что я не понимаю, это очень хорошо, и я не использовал TutorialPage, так что я буду очень благодарен, если кто-то оставит мне подсказки или пример, как это сделать правильно

ответ

1

Код в вашем if-блоке никогда не выполняется, если ключ «isFirstLaunch» не существует.

Попробуйте это:

if let isFirstStart = UserDefaults.standard.value(forKey: "isFirstLaunch") as? Bool { 
     print("this is not the first launch") 
    } else { 
     print("this is the first launch") 
     UserDefaults.standard.set(false, forKey: "isFirstLaunch") 
     UserDefaults.standard.synchronize() 

     let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
     let vc : WalkThroughScreen = mainStoryboard.instantiateViewController(withIdentifier: "WalkThroughScreen") as! WalkThroughScreen 
     self.present(vc, animated: true, completion: nil) 
    } 
+0

Не могли бы вы проверить названия раскадровки и классы, которые правильно используются? – Dakata

+0

См. Мой обновленный ответ. Название основной раскадровки - «Главное» по умолчанию в шаблонах. если вы этого не изменили, код выше по праву. –

+0

Я получаю сообщение об ошибке в последней строке: нет члена типа "present" – Dakata

3

Да вы правы, вы должны использовать userDefaults для достижения этой цели. И вы должны сделать это внутри appDelegate() Рул Koops ответ должен сделать это, но вы можете попробовать, как это также:

let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore") 
    if launchedBefore { 
     print("This is not first launch.") 
    } else { 
     print("This is first launch.") 
     UserDefaults.standard.set(true, forKey: "launchedBefore") 
     UserDefaults.standard.synchronize() 
     let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
     let vc : WalkThroughScreen = mainStoryboard.instantiateViewController(withIdentifier: "WalkThroughScreen") as! WalkThroughScreen 
     self.present(vc, animated: true, completion: nil) 

    } 

И убедитесь, что заявить: let userDefaults = UserDefaults.standard и использовать его внутри didFinishLaunchingWithOptions.

Есть еще больше решений, так я дам вам еще один:

let userDefaults = UserDefaults.standard 

    if !userDefaults.bool(forKey: "launchedBefore") { 
     let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
     let vc : WelcomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "WalkThroughScreen") as! WelcomeViewController 
     self.window?.makeKeyAndVisible() 
     self.window?.rootViewController?.present(vc, animated: false, completion: nil) 
     userDefaults.set(true, forKey: "launchedBefore") 
     userDefaults.synchronize() 

    } 

Вы можете даже объявить все раскадровки вещь в одной строке:

self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "WalkThroughScreen") 

Но это предполагает, что вы объявляете 2 переменные :

var window: UIWindow? 
var storyboard: UIStoryboard? 

Если это не помогло, просто скажите мне, я попытаюсь помочь.

+1

, если этот код помещен в appDelegate(), поскольку Tarvo Mäesepp is предлагая, тогда ему нужно немного изменить: self.window? .makeKeyAndVisible() self.window? .rootViewController? .present (vc, animated: false, completion: noil) –

+0

Эй, я не могу заставить его работать, потому что я смешивание имени vc и имени идентификатора. Могу ли я отправить вам приложение, чтобы быстро взглянуть? – Dakata

+0

Я использовал те же идентификаторы, которые вы нам дали. Но да, вы можете отправить его. –

 Смежные вопросы

  • Нет связанных вопросов^_^