Search code examples
iosswiftxcodeuitextfielduidatepicker

Add a Done button within a pop-up datePickerView in Swift?


I want to add a Done button within a popped up datePickerView in Swift.

Here is the code:

@IBOutlet var datePicker: UITextField!

@IBAction func dateTextInputPressed(sender: UITextField) {

    var datePickerView = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.Date

    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
}

func handleDatePicker(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    datePicker.text = dateFormatter.stringFromDate(sender.date)
}

I can use this code to pop up a datePickerView successfully.

result of datePickerView

But after I've selected the date, it does not have a "Done" button to dismiss it.

So how can I add the Done button into it?


Solution

  • I made this extension to close the picker. Swift 2

    extension UIToolbar {
    
     func ToolbarPiker(mySelect : Selector) -> UIToolbar {
    
        let toolBar = UIToolbar()
    
        toolBar.barStyle = UIBarStyle.Default
        toolBar.translucent = true
        toolBar.tintColor = UIColor.blackColor()
        toolBar.sizeToFit()
    
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: mySelect)
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    
        toolBar.setItems([ spaceButton, doneButton], animated: false)
        toolBar.userInteractionEnabled = true
    
        return toolBar
    }
    
    }
    

    Swift 3 - 4

    extension UIToolbar {
    
    func ToolbarPiker(mySelect : Selector) -> UIToolbar {
    
        let toolBar = UIToolbar()
    
        toolBar.barStyle = UIBarStyle.default
        toolBar.isTranslucent = true
        toolBar.tintColor = UIColor.black
        toolBar.sizeToFit()
    
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: mySelect)
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
    
        toolBar.setItems([ spaceButton, doneButton], animated: false)
        toolBar.isUserInteractionEnabled = true
    
        return toolBar
    }
    
    }
    

    And you can use it simply in your viewController:

      override func viewDidLoad() {
        super.viewDidLoad()
    
     //SWIFT2
     /*
    let toolBar = UIToolbar().ToolbarPiker(#selector(MyViewController.dismissPicker))
    
     */
    // Swift3 - 4
        let toolBar = UIToolbar().ToolbarPiker(mySelect: #selector(MyViewController.dismissPicker))
    
        myTextField.inputAccessoryView = toolBar
    
    
    }
    
     // Swift 2 - 3
     func dismissPicker() { 
    
        view.endEditing(true)
    
    }
    
     // Swift 4
     @objc func dismissPicker() { 
    
        view.endEditing(true)
    
    }