Swift 尝试以编程方式显示包含的视图控制器
使用XCode 6.1,我尝试使用自定义菜单滚动我自己的视图控制器包含。。。我在主视图控制器中使用以下函数来显示子视图控制器:Swift 尝试以编程方式显示包含的视图控制器,swift,uiviewcontroller,xcode6,Swift,Uiviewcontroller,Xcode6,使用XCode 6.1,我尝试使用自定义菜单滚动我自己的视图控制器包含。。。我在主视图控制器中使用以下函数来显示子视图控制器: var currentController: UIViewController? // Function within main view controller class func presentController(controller: UIViewController) { if currentController != controller {
var currentController: UIViewController?
// Function within main view controller class
func presentController(controller: UIViewController) {
if currentController != controller {
if currentController != nil {
currentController!.willMoveToParentViewController(nil)
currentController!.view.removeFromSuperview()
currentController!.removeFromParentViewController()
}
controller.willMoveToParentViewController(self)
self.addChildViewController(controller)
self.view.addSubview(controller.view)
controller.didMoveToParentViewController(self)
currentController = controller
}
}
当应用程序最初运行时,我使用self.presentController(firstViewController)
内部viewdide
,这很有效
但是,在主视图控制器之外的自定义菜单(使用)中,我尝试按如下方式显示所选视图控制器:MainViewController().presentController(secondViewController)
。运行此操作时,currentController将被删除(显示主视图控制器的视图,该视图仅为黑色背景),但新控制器不会加载
有人能给我指引正确的方向吗?假设
MainViewController
是您的主视图控制器的类的名称,下面的行可能不会实现您的目的:
MainViewController().presentController(secondViewController)
MainViewController()
将实例化主视图控制器的新副本。我假设您的目的是获取对现有控制器的引用,而不是实例化一个新的控制器
与您手头的问题无关,但您不应该在调用
addChildViewController
之前调用willMoveToParentViewController
(因为它会为您这样做)。配置完新控制器的视图后,只需调用didMoveToParentViewController
。因此:
func presentController(controller: UIViewController) {
if currentController != controller {
if currentController != nil {
currentController!.willMoveToParentViewController(nil)
currentController!.view.removeFromSuperview()
currentController!.removeFromParentViewController()
}
// controller.willMoveToParentViewController(self)
self.addChildViewController(controller)
self.view.addSubview(controller.view)
controller.didMoveToParentViewController(self)
currentController = controller
}
}
非常感谢你这么做。最后我在应用程序入口点执行了
let applicationController=main applicationController()
,然后我可以执行applicationController.presentController(viewController)
来更改当前控制器。太神了谢谢