swift получить topmostViewController избегайте UIAlertController

#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. о, извините, я не успел прочитать ваш код. Спасибо