Изменение rootViewController не отображает viewController, установленный как root - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть 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
}

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

part of my storyboard

в чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

используйте 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()
}
0 голосов
/ 25 декабря 2018

Поместите эту функцию в свой класс 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...