Изменение 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)
}