Как правильно пропустить 2 ViewController - PullRequest
1 голос
/ 25 мая 2020

Подскажите, пожалуйста, что я делаю не так? Есть 3 вида:

  1. Пользователь выбирает свой пол
  2. Пользователь вводит свой вес
  3. Главное приложение просмотра

После Пользователь записал эти данные, он попадает на главный экран приложения. Я хочу, чтобы пользователь выбирал свой пол и вес только при первом запуске приложения. Для этого я создал модель UserSettings, чтобы хранить там введенные значения:

final class UserSettings {
    enum SettingsKeys: String {
        case userSex
        case userWeight
    }

    static var userSex: String! {
        get {
            return UserDefaults.standard.string(forKey: SettingsKeys.userSex.rawValue)
        } 
        set {
            let defaults = UserDefaults.standard
            let key = SettingsKeys.userSex.rawValue
            if let sex = newValue {
                print("Пол \(sex) добавлен в \(key)")
                defaults.set(sex, forKey: key)
            } else {
                defaults.removeObject(forKey: key)
            }
        }
    }

    static var userWeight: String! {
        get {
            return UserDefaults.standard.string(forKey: SettingsKeys.userWeight.rawValue)
        } 
        set {
            let defaults = UserDefaults.standard
            let key = SettingsKeys.userWeight.rawValue
            if let weight = newValue {
                print("Вес \(weight) добавлен в \(key)")
                defaults.set(weight, forKey: key)
            } else {
                defaults.removeObject(forKey: key)
            }
        }
    }
}

В AppDelegate в функции didFinishLaunchingWithOptions launchOptions написал:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    let defaults = UserDefaults.standard
    let skipPageSex = defaults.bool(forKey: UserSettings.userSex)
    let skipPageWeight = defaults.bool(forKey: UserSettings.userWeight)

    if skipPageSex && skipPageWeight == true {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let nextView: MainViewController = mainStoryboard.instantiateViewController(identifier: "MainViewController") as! MainViewController
        window?.rootViewController = nextView
        self.window?.makeKeyAndVisible()
    } else {
        let firstStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let firstView: WelcomeViewController = firstStoryboard.instantiateViewController(identifier: "welcomeVC") as! WelcomeViewController
        window?.rootViewController = firstView
        self.window?.makeKeyAndVisible()
    }
    return true
 }

В поле Пол выберите Просмотр в действие кнопки, я написал:

@IBAction func manSelected(_ sender: UIButton) {        
    sender.setTitle("Male", for: .normal)
    UserSettings.userSex = sender.currentTitle
    let defaults = UserDefaults.standard
    defaults.setValue(true, forKey: UserSettings.userSex)
    defaults.synchronize()
}

И то же самое для кнопки с женским выбором, только sender.setTitle("Female", for: .normal) Я пробовал удалить UIMainStoryboardFile и UIApplicationSceneManifest в Info.plist и в этом случае получаю просто черный экран без ошибок. В Storyboard ID я использую то же значение, что и в AppDelegate. Пожалуйста, помогите

1 Ответ

0 голосов
/ 26 мая 2020

enter image description here

Попробуйте что-то вроде этого. Начальный с TempViewController. В зависимости от ваших данных, он перейдет в режим Show Gender Picker или go прямо на Main. Не забудьте проверить Is Initial View Controller для root Navigation Controller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...