UITableViewController 作为下拉列表?

UITableViewController as dropdown?

我想创建一个 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。此外,您必须在删除时从超级视图中删除视图,并在添加时将自己作为父视图。

参考这个link了解详情 How is a parent view controller notified that is's child view controller has removed itself?。 您的代码应如下所示,

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