#swift #uiviewcontroller #topmost
#быстрый #uiviewcontroller #самый верхний
Вопрос:
я хочу получить topMostVC, поэтому я сделал эту функцию:
func topMostViewController() -gt; UIViewController { if let presented = self.presentedViewController { return presented.topMostViewController() } if let navigation = self as? UINavigationController { return navigation.visibleViewController?.topMostViewController() ?? navigation } if let tab = self as? UITabBarController { return tab.selectedViewController?.topMostViewController() ?? tab } return self }
Затем позвонил, используя:
AppDelegate.shared.window?.rootViewController?.topMostViewController()
Но у меня проблема в том, что когда на экране отображается UIAlertController, он возвращает UIAlertController, а не мой ожидаемый viewcontroller
Может ли кто-нибудь подсказать мне, как избежать UIAlertController, спасибо
Ответ №1:
Просто добавьте еще одно условие
if let presented = self.presentedViewController, !(presented is UIAlertController) { // lt;== Here or use !presented.isKind(of: UIAlertController.self) return presented.topMostViewController() }
Комментарии:
1. если представлен UIAlertController, то он ничего не вернет.
2. Что значит представлен UIAlertController ?
3. UIAlertController, отображаемый на экране, в таком случае, что он вернет?
4. Он возвращает базовый контроллер, и это вопрос «Как получить контроллер без контроллера оповещения».
5. о, извините, я не успел прочитать ваш код. Спасибо