Макет моего приложения состоит из панели вкладок, из каждой вкладки есть панель навигации, к которой прикреплен UITableViewController.
Когда я сделал выбор строки, я нажимаю контроллер представления, который становится хорошо встроенным в панель навигации..
Я хотел бы найти этот последний контроллер вида программно.
Вот как я нажимаю на свой контроллер видимого вида (модернизированная версия):
@objc
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) {
let vc = WebPageViewController()
navigationController?.pushViewController(vc, animated: true)
}
Я не нашелудалось найти способ.Я использую это расширение:
public extension UIWindow {
public var visibleViewController: UIViewController? {
return UIWindow.getVisibleViewControllerFrom(rootViewController)
}
public static func getVisibleViewControllerFrom(_ vc: UIViewController?) -> UIViewController? {
if let nc = vc as? UINavigationController {
return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
} else if let tc = vc as? UITabBarController {
return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
} else {
if let pvc = vc?.presentedViewController {
return UIWindow.getVisibleViewControllerFrom(pvc)
}
else if let pushed = vc?.childViewControllers.last {
return pushed
}
else {
return vc
}
}
}
}