Это работает на представить любой контроллер представления, если Вы имеете контроллер навигации в наличии. self.navigationController? .present (MyViewController, анимированный: верный, завершение: ноль) кроме того, я могу способный представить предупреждения и почтовый контроллер также.
У меня была подобная проблема о Swift 4.2, но мое представление не было представлено от цикла представления. Я нашел, что имел, несколько непосредственно переходят, чтобы быть представленными в то же время. Таким образом, я использовал dispatchAsyncAfter.
func updateView() {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
// for programmatically presenting view controller
// present(viewController, animated: true, completion: nil)
//For Story board segue. you will also have to setup prepare segue for this to work.
self?.performSegue(withIdentifier: "Identifier", sender: nil)
}
}
Я зафиксировал эту ошибку с хранением самого верхнего viewcontroller в константу, которая найдена в в то время как цикл по rootViewController:
if var topController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
topController.present(controller, animated: false, completion: nil)
// topController should now be your topmost view controller
}
}