Изменение rootViewController не отображает viewController, установленный как root

У меня есть initialViewController, если я нахожу информацию для входа пользователя, я направляю пользователя в Home, но если нет, я устанавливаю регистрацию / вход ViewController в качестве пользователя root. Я тестировал с точками останова, что мой Register/login ViewController didLoad и didAppear получает выполнение, но мой ViewController регистрации / входа не отображается, а initialViewController остается на экране. это мой код:

public static func setRootViewController(withId id: String, storyBoardName: String) {
    let mainStoryboard: UIStoryboard = UIStoryboard(name: storyBoardName, bundle: nil)
    let newRootVC = mainStoryboard.instantiateViewController(withIdentifier: id)
    appDelegateRef.window!.rootViewController = newRootVC
}

и это часть моей раскадровки:

в чем тут проблема?

2 ответа

Используйте appDelegateRef.window!.makeKeyAndVisible() в конце вашей функции

public static func setRootViewController(withId id: String, storyBoardName: String) {
    let mainStoryboard: UIStoryboard = UIStoryboard(name: storyBoardName, bundle: nil)
    let newRootVC = mainStoryboard.instantiateViewController(withIdentifier: id)
    appDelegateRef.window!.rootViewController = newRootVC
    appDelegateRef.window!.makeKeyAndVisible()
}

Поместите эту функцию в свой класс AppDelegate. Вы можете вызвать эту функцию из любого места в ваших контроллерах представления.

class AppDelegate: UIResponder, UIApplicationDelegate {
    // ...

    public func present(viewController: UIViewController) {
        guard let window = window else { return }
        UIView.transition(with: window, duration: 0.5, options: .transitionFlipFromLeft, animations: {
            window.rootViewController = viewController
        }, completion: nil)
    }
}

В контроллере представления, из которого вы хотите, чтобы пользователь вышел из системы, вызовите функцию над этим способом:

public static func setRootViewController(withId id: String, storyBoardName: String) {
    let mainStoryboard: UIStoryboard = UIStoryboard(name: storyBoardName, bundle: nil)
    let newRootVC = mainStoryboard.instantiateViewController(withIdentifier: id)

    guard let delegate = UIApplication.shared.delegate as? AppDelegate else { return }
    delegate.present(viewController: newRootVC)
}
Другие вопросы по тегам