Skip to content

Instantly share code, notes, and snippets.

@soggybag
Created November 29, 2015 22:50
Show Gist options
  • Save soggybag/81b2897748bfd458d8bd to your computer and use it in GitHub Desktop.
Save soggybag/81b2897748bfd458d8bd to your computer and use it in GitHub Desktop.
UITextField inputView with UIDatePicker. Opens a datepicker view with a done button
// Make a view with date picker and done button
func makeDatePickerWithDoneButton() {
let inputView = UIView(frame: CGRectMake(0,0, self.view.frame.width, 240))
var datePicker = UIDatePicker(frame: CGRect(x: 0, y: 40, width: 0, height: 0))
datePicker.datePickerMode = .Date
inputView.addSubview(datePicker)
datePicker.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: .ValueChanged)
let doneButton = UIButton(frame: CGRect(x: (self.view.frame.size.width/2) - (100/2), y: 0, width: 100, height: 50))
doneButton.setTitle("Done", forState: .Normal)
inputView.addSubview(doneButton)
doneButton.addTarget(self, action: Selector("handleDoneButton:"), forControlEvents: .TouchUpInside)
handleDatePicker(datePicker)
textField.inputView = inputView
}
func handleDatePicker(sender: UIDatePicker) {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
textField.text = formatter.stringFromDate(sender.date)
}
func handleDoneButton(sender: UIButton) {
textField.resignFirstResponder()
}
func datePickerValueChanged(sender: UIDatePicker) {
let formatter = NSDateFormatter()
formatter.dateStyle = NSDateFormatterStyle.MediumStyle
textField.text = formatter.stringFromDate(sender.date)
}
@alfredolucomav
Copy link

alfredolucomav commented May 12, 2020

Update to swift5:

// Make a view with date picker and done button
    func makeDatePickerWithDoneButton() {
        let inputView = UIView(frame: CGRectMake(0,0, self.view.frame.width, 240))
        
        var datePicker = UIDatePicker(frame: CGRect(x: 0, y: 40, width: 0, height: 0))
        datePicker.datePickerMode = .date
        inputView.addSubview(datePicker)
        datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
        
        let doneButton = UIButton(frame: CGRect(x: (self.view.frame.size.width/2) - (100/2), y: 0, width: 100, height: 50))
        doneButton.setTitle("Hecho", forState: .Normal)
        inputView.addSubview(doneButton)
        doneButton.addTarget(self, action: #selector(handleDoneButton(sender:)), forControlEvents: .touchUpInside)
        
        handleDatePicker(sender: datePicker)
        
        textField.inputView = inputView
    }

    @objc func handleDatePicker(sender: UIDatePicker) {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        textField.text = formatter.stringFromDate(sender.date)
    }

    @objc func handleDoneButton(sender: UIButton) {
        textField.resignFirstResponder()
    }


    func datePickerValueChanged(sender: UIDatePicker) {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        textField.text = formatter.stringFromDate(sender.date)
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment