Как перейти на другую страницу при первом запуске приложения в Swift 3 - PullRequest
0 голосов
/ 27 апреля 2018

Я внедряю приложение для iOS. когда пользователь запускает приложение в первый раз, мне нужно перейти на другую страницу, а в следующий раз мне нужно перейти на домашнюю страницу. Как выполнить эту задачу в iOS swift?

Ответы [ 5 ]

0 голосов
/ 27 апреля 2018

Следующее решение этой распространенной проблемы предполагает, что

  1. Вначале - в этом примере это до того, как в пользовательских значениях по умолчанию была установлена ​​клавиша "username" - мы хотим запустить контроллер начального вида раскадровки (где пользователь должен установить "username" ключ).

  2. После этого мы всегда хотим запустить другой контроллер представления в раскадровке, идентификатор которого в этом примере равен "root".

Это очень коротко и просто!

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        if let rvc = self.window?.rootViewController {
            if UserDefaults.standard.object(forKey:"username") as? String != nil {
                self.window!.rootViewController = rvc.storyboard!.instantiateViewControllerWithIdentifier("root")
            }
        }
        return true
    }
}
0 голосов
/ 27 апреля 2018

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

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {


    if firstTime = UserDefaults.standard.object(forKey: "firstTime")
    {
        let storyboard = UIStoryboard(name: "SecondStoryBoard", bundle: nil)
        let MainView = storyboard.instantiateViewController(withIdentifier: "SecondTimeViewController") as! SecondTimeViewController

        let navController = UINavigationController.init(rootViewController: MainView)

        self.window?.rootViewController = navController

    }
    else
    {
        UserDefaults.standard.set(true, forKey: "firstTime")

        let storyboard = UIStoryboard(name: "FirstStoryBoard", bundle: nil)
        let MainView = storyboard.instantiateViewController(withIdentifier: "FirstTimeViewController") as! FirstTimeViewController

        let navController = UINavigationController.init(rootViewController: MainView)

        self.window?.rootViewController = navController

    }

}
0 голосов
/ 27 апреля 2018

Создать функцию для проверки того, что если ваш ключ в UserDefaults или не используется эта ссылка & Затем проверьте, если ... еще

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    if isKeyPresentInUserDefaults(key: "isFirstTime") {
        let home = HomeVC()
        window?.rootViewController = home
    } else {
        let login = LoginVC()
        window?.rootViewController = login
        UserDefaults.standard.set(true, forKey: "isFirstTime")
    }

    return true
}

func isKeyPresentInUserDefaults(key: String) -> Bool {
    return UserDefaults.standard.object(forKey: key) != nil
}
0 голосов
/ 27 апреля 2018

Вы можете использовать изменение метода didFinishLaunchingWithOptions в AppDelegate для достижения этой цели.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    self.window = UIWindow(frame: UIScreen.main.bounds)
    guard let firstTime = UserDefaults.standard.object(forKey: "IsFirstTime")  else {
        UserDefaults.standard.set(true, forKey: "IsFirstTime")
        let storyBoard = UIStoryboard.init(name: "FirstStoryBoard", bundle: nil)
        let initialVc = storyBoard.instantiateViewController(withIdentifier: "FirstControllerId") as! FirstTimeViewController
        self.window?.rootViewController = initialVc
        self.window?.makeKeyAndVisible()
        return true
    }
    let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
    let initialVc = storyBoard.instantiateViewController(withIdentifier: "NormalInitialController") as! ViewController
    self.window?.rootViewController = initialVc
    self.window?.makeKeyAndVisible()
    return true

}

Вы проверяете, существует ли значение для ключа «IsFirstTime» в UserDefaults. Не будет никакого значения, если приложение запускается в первый раз. В этом случае вы можете запустить свой FirstTimeViewController и установить значение для ключа в UserDefaults.

Если в UserDefaults существует значение, просто запустите обычный ViewController.

0 голосов
/ 27 апреля 2018

Этого можно добиться с помощью пользовательских ошибок Просто создайте новый контроллер, такой как SplashViewController, который будет перенаправлять только на нужный ViewController.

import UIKit

class SplashViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        decideWhichScreenToShow()
    }

    // This logic will do
    func decideWhichScreenToShow(){
        if !UserDefaults.standard.bool(forKey: "your_key"){
            // This will execute first time, in that controller's viewDidLoad() make this true
        }else{

        }
    }
}

Вы можете написать ту же логику в Appdelegate.

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