2017-06-05 109 views
0

有没有一种方法可以从UIViewUIViewController的一部分)导航到另一个UIViewController既不使用故事板也不使用导航控制器?从UIView导航到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属于另一个UIViewController,称为HomeControllerUIViewController,UIScrollViewDelegate)。我根本不使用故事板,我想保持这种状态,因为我要在一个团队中开展一个项目(因此,程序化解决方案将非常受欢迎)...

回答

2

您可以简单地这样做是为了导航,而无需使用navigationController

self.present(toController, animated: true, completion: nil) 

或使用此,

UIApplication.shared.keyWindow?.rootViewController?.present(toController, animated: true, completion: nil) 
+0

我得到一个错误说'类型的值“CurrentClass” [个体经营]没有成员presentViewController.''presentViewController'似乎已被'present'取代。然而,我得到了同样的错误...如果我用'HomeController()'替换'self',我得到错误'尝试在上呈现,其视图不是在窗口层次!' – Moritz

+0

查看更新的答案@Moritz – Maddy

+0

您是否在'UIVIEW'子类中添加了这个'func singleTapOnLikesDetected(_ sender:UITapGestureRecognizer)' – Maddy

1

只有UIViewControllers可以提出其他UIViewControllers不是UIViews所以你不会找到了UIView本方法。你也不能用HomeController()替换自己,因为它创建了一个新的HomeController和它自己的UIView,它没有被添加到任何其他视图(如错误所示)。

你有几个选项真的:

1)创建您的UIView协议/委托并HomeController的符合它。然后UIView可以调用协议中的方法,并且HomeController执行实际的切换。

2)你可以得到根视图控制器来呈现新的UIViewController这样的:UIApplication.shared.keyWindow?.rootViewController?.present(viewController, animated: true, completion: nil)