从UIView导航到UIViewController而不使用故事板和导航控制器

时间:2017-06-05 16:28:44

标签: ios swift uiview uiviewcontroller

是否可以使用故事板和导航控制器从UIViewUIViewController的一部分导航到另一个UIViewController

我有一个UITapGestureRecognizer,只要点击一次,我就想导航到另一个UIViewControllerBuyController())。因此,我的代码如下所示:

//handle singleTap
func singleTapOnLikesDetected(_ sender: UITapGestureRecognizer) {

    print("check") //works
    let toController = BuyController()
    BarController().pushViewController(toController, animated: true) //error occurs since BarController is no navigationcontroller

}

BarControllerUITabBarControllerUITabBarControllerDelegate)是我AppDelegate.swift中的rootViewController。然而,UIView属于名为UIViewControllerHomeControllerUIViewController)的另一个UIScrollViewDelegate。我根本不使用故事板,我想保持这种方式,因为我将在一个团队的项目中工作(因此,非常欢迎程序化的解决方案)......

2 个答案:

答案 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)