Как найти видимый pushViewController из контроллера навигации? - PullRequest
0 голосов
/ 22 ноября 2018

Макет моего приложения состоит из панели вкладок, из каждой вкладки есть панель навигации, к которой прикреплен 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
            }
        }
    }
}
...