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