我想创建一个UITableViewController
作为单击UIButton
的下拉菜单。
我已经使用addChildViewController
创建了一个,但我不能通过第二次单击按钮来删除它。
我使用的代码:
var flag = 0
func filter(sender: UIButton){
let _viewController = storyboard!.instantiateViewControllerWithIdentifier("UserViewController") as! UserViewController
if(flag == 1){
_viewController.willMoveToParentViewController(nil)
_viewController.removeFromParentViewController()
flag = 0
return
}
addChildViewController(_viewController)
_viewController.view.frame.origin.y = filterButton.frame.maxY
_viewController.view.frame.origin.x = self.view.frame.size.width-250
_viewController.view.frame.size.width = 250
_viewController.view.frame.size.height = 500
self.view.addSubview(_viewController.view)
flag = 1
}
你的情况很简单,因为你是实例化视图控制器每次你点击按钮。您应该在viewDidLoad
中实例化_viewController
。此外,你必须在移除时从superview中移除视图,在添加时将self设置为parent。
请参阅此链接了解详细信息父视图控制器如何通知它的子视图控制器已经删除了自己?您的代码应该如下所示,
var _viewController:UITableViewController!
var flag = 0
func filter(sender: UIButton){
if(flag == 1){
_viewController.willMoveToParentViewController(nil)
_viewController.view.removeFromSuperview()
_viewController.removeFromParentViewController()
flag = 0
return
}
addChildViewController(_viewController)
_viewController.view.frame.origin.y = filterButton.frame.maxY
_viewController.view.frame.origin.x = self.view.frame.size.width-250
_viewController.view.frame.size.width = 250
_viewController.view.frame.size.height = 500
self.view.addSubview(_viewController.view)
_viewController.didMoveToParentViewController(self)
flag = 1
}
override func viewDidLoad() {
super.viewDidLoad()
_viewController = storyboard!.instantiateViewControllerWithIdentifier("UserViewController") as! UserViewController
}
不要使用下拉菜单。它不属于iOS。
http://www.lukew.com/ff/entry.asp?1950