Код: Выделить всё
extension UIApplication {
// Get top most view controller in App.
class func getTopMostViewController(base: UIViewController? = UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return getTopMostViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return getTopMostViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return getTopMostViewController(base: presented)
}
return base
}
}
Код: Выделить всё
extension UIApplication {
class func getTopViewController(base: UIViewController? = keyWindow?.rootViewController) -> UIViewController? {
// Find the most visible view controller in the hierarchy
if let nav = base as? UINavigationController {
return getTopViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return getTopViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return getTopViewController(base: presented)
}
return base
}
private static var keyWindow: UIWindow? {
// Get connected scenes
return UIApplication.shared.connectedScenes
// Keep only active scenes, onscreen and visible to the user
.filter { $0.activationState == .foregroundActive }
// Keep only the first `UIWindowScene`
.compactMap { $0 as? UIWindowScene }
// Get its associated windows
.flatMap { $0.windows }
// Finally, keep only the key window
.first { $0.isKeyWindow }
}
}
Как я могу это изменить? функцию, чтобы всегда синхронно получать правильный верхний контроллер представления?
Дополнительный контекст:
Я ориентированы на iOS 13 и более поздних версий.
Примечание. Прежде всего, я хочу, чтобы вторая функция работала на iPhone в каждом случае, когда в настоящее время закрывается диалоговое окно разрешения камеры, и я немедленно вызываю вторую функцию при обратном вызове диалогового окна. , то эта проблема возникает, когда ключевое окно равно нулю.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -uiscene-i
Мобильная версия