代码之家  ›  专栏  ›  技术社区  ›  Stéphane de Luca

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

  •  0
  • Stéphane de Luca  · 技术社区  · 7 年前

    我的应用程序布局由一个选项卡栏组成,每个选项卡上都有一个导航栏,该导航栏附加一个UITableViewController。

    当我没有选择行时,我将视图控制器与becomes巧妙地嵌入到导航栏中。

    我想以编程方式找到后一个视图控制器。

    下面是我如何推动可视视图控制器(流线型版本):

        @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 回复  |  直到 7 年前