UITableViewController作为下拉列表



我想创建一个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

最新更新