使用XCode 6.1我试图用自定义菜单滚动我自己的View 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)
内使用了viewDidAppear
,这有效。
但是,在我的自定义菜单中(使用REMenu)在主视图控制器之外,我正在尝试显示所选的视图控制器,如下所示:MainViewController().presentController(secondViewController)
。当这个运行时,currentController被删除(显示主视图控制器的视图,这只是一个黑色背景)但新控制器没有被加载。
有人能引导我朝正确的方向前进吗?
答案 0 :(得分:6)
假设MainViewController
是主视图控制器类的名称,则以下行可能不会执行您的操作:
MainViewController().presentController(secondViewController)
MainViewController()
将实例化主视图控制器的新副本。我假设您打算获得对现有控制器的引用,而不是实例化新控制器。
与您手头的问题无关,但在致电willMoveToParentViewController
之前不应致电addChildViewController
(因为它会为您做到这一点)。您只需在完成配置新控制器视图后拨打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
}
}