是否可以使用故事板和导航控制器从UIView
(UIViewController
的一部分导航到另一个UIViewController
?
我有一个UITapGestureRecognizer,只要点击一次,我就想导航到另一个UIViewController
(BuyController()
)。因此,我的代码如下所示:
//handle singleTap
func singleTapOnLikesDetected(_ sender: UITapGestureRecognizer) {
print("check") //works
let toController = BuyController()
BarController().pushViewController(toController, animated: true) //error occurs since BarController is no navigationcontroller
}
BarController
(UITabBarController
,UITabBarControllerDelegate
)是我AppDelegate.swift
中的rootViewController。然而,UIView
属于名为UIViewController
(HomeController
,UIViewController
)的另一个UIScrollViewDelegate
。我根本不使用故事板,我想保持这种方式,因为我将在一个团队的项目中工作(因此,非常欢迎程序化的解决方案)......
答案 0 :(得分:2)
您只需执行此操作即可导航,而无需使用navigationController
:
self.present(toController, animated: true, completion: nil)
或者使用此,
UIApplication.shared.keyWindow?.rootViewController?.present(toController, animated: true, completion: nil)
答案 1 :(得分:1)
只有UIViewControllers可以呈现其他UIViewControllers而不是UIViews,因此您将无法在UIView上找到当前方法。你也不能用HomeController()替换self,因为它创建了一个新的HomeController,它有自己的UIView,但没有被添加到任何其他视图中(如错误所示)。
你真的有几个选择:
1)在你的UIView上创建一个协议/委托,并使HomeController符合它。然后UIView可以调用协议中的方法,HomeController可以进行实际的切换。
2)您可以让根视图控制器像这样呈现新的UIViewController:UIApplication.shared.keyWindow?.rootViewController?.present(viewController, animated: true, completion: nil)