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
}
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
}