如何从导航控制器中找到可见的pushViewController?

时间:2018-11-22 12:53:33

标签: uinavigationcontroller swift4

我的应用布局由一个选项卡组成,每个选项卡中都有一个导航栏,在该导航栏上附加了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
            }
        }
    }
}

0 个答案:

没有答案