2

I would like to create a UITableViewController as a dropdown on clicking a UIButton.

I have created one using addChildViewController but I cannot remove it by clicking the button a second time.

The code I used:

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
}
Nathaniel Ford
  • 20,545
  • 20
  • 91
  • 102

2 Answers2

1

Your case is simple because you are instantiating the view controller everytime you click the button. You should instantiate the _viewController in viewDidLoad. Also you must remove the view from superview on removing and make the self as parent on adding.

Refer this link for detail How is a parent view controller notified that is's child view controller has removed itself?. Your code should look like the following,

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

}
Community
  • 1
  • 1
Boopathy
  • 415
  • 3
  • 12
0

Don't use drop downs. It is not something that belongs on iOS.

http://www.lukew.com/ff/entry.asp?1950

Fogmeister
  • 76,236
  • 42
  • 207
  • 306