iOS Swift 3 - UIDatePicker
Solution 1
In Swift 3 you can use DateComponents
for that like this way.
First add action on datepicker
for .valueChanged
events.
datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)
Then get selected day, month and year using DateComponents
in the action.
func dateChanged(_ sender: UIDatePicker) {
let components = Calendar.current.dateComponents([.year, .month, .day], from: sender.date)
if let day = components.day, let month = components.month, let year = components.year {
print("\(day) \(month) \(year)")
}
}
Solution 2
UIDatePicker in Swift 3 and Swift 4 example.
In Swift 3 You can use
- Create Simple Project of Single View Application in swift 3
- Drag a text field & connect to viewController
- Date picker look like image
-
ViewController code is bellow..
class ViewController: UIViewController { //Text Field Connection @IBOutlet weak var txtDatePicker: UITextField! //Uidate picker let datePicker = UIDatePicker() override func viewDidLoad() { super.viewDidLoad() //show date picker showDatePicker() } func showDatePicker(){ //Formate Date datePicker.datePickerMode = .date //ToolBar let toolbar = UIToolbar(); toolbar.sizeToFit() //done button & cancel button let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker") let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "cancelDatePicker") toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false) // add toolbar to textField txtDatePicker.inputAccessoryView = toolbar // add datepicker to textField txtDatePicker.inputView = datePicker } func donedatePicker(){ //For date formate let formatter = DateFormatter() formatter.dateFormat = "dd/MM/yyyy" txtDatePicker.text = formatter.string(from: datePicker.date) //dismiss date picker dialog self.view.endEditing(true) } func cancelDatePicker(){ //cancel button dismiss datepicker dialog self.view.endEditing(true) } }
-
Full Source project is given to github. github Link:https://github.com/enamul95/DatePicker1
In Swift 4 or 5 you can use bellow code
class ViewController: UIViewController { @IBOutlet weak var txtDatePicker: UITextField! let datePicker = UIDatePicker() override func viewDidLoad() { super.viewDidLoad() showDatePicker() } func showDatePicker(){ //Formate Date datePicker.datePickerMode = .date //ToolBar let toolbar = UIToolbar(); toolbar.sizeToFit() let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(donedatePicker)); let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker)); toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false) txtDatePicker.inputAccessoryView = toolbar txtDatePicker.inputView = datePicker } @objc func donedatePicker(){ let formatter = DateFormatter() formatter.dateFormat = "dd/MM/yyyy" txtDatePicker.text = formatter.string(from: datePicker.date) self.view.endEditing(true) } @objc func cancelDatePicker(){ self.view.endEditing(true) } }
Solution 3
Suppose if you want to show datePicker on tapping textfield and when user select some date from it then it will automatically populate on your textfield .
@IBOutlet weak var dateTextField: UITextField!
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.date
dateTextField.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), for: UIControlEvents.valueChanged)
// Make a dateFormatter in which format you would like to display the selected date in the textfield.
func datePickerValueChanged(sender:UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = DateFormatter.Style.medium
dateFormatter.timeStyle = DateFormatter.Style.none
dateTextField.text = dateFormatter.string(from: sender.date)
}
Here Sender.date which is the instance of UIDatePicker pick up the date from the datepicker and populate on your textfield.
Solution 4
Create IBOutlet
of UIDatePicker
and connect it properly then use below code to get day, month, year ect.
var comp = NSDateComponents()
@IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
datePicker.addTarget(self, action: Selector("datePickerChanged:"), forControlEvents: UIControlEvents.ValueChanged)
}
func datePickerChanged(datePicker:UIDatePicker){
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
let cal = NSCalendar.currentCalendar()
comp = cal.components([.Era, .Day, .Month, .Year, .Hour, .Minute] , fromDate: datePicker.date)
// getting day, month, year ect
print ("Era:\(comp.era) Date:\(comp.day) Month:\(comp.month) Month:\(comp.year) Hours: \(comp.hour) Minuts:\(comp.minute)")
}
Solution 5
var picker = UIDatePicker()
picker = UIDatePicker()
textField.inputView = picker
picker.addTarget(self, action: #selector(ViewController.handleDatePicker), for: UIControlEvents.valueChanged)
picker.datePickerMode = .date
func handleDatePicker() {
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
textfield.text = dateFormatter.string(from: picker.date)
textfield.resignFirstResponder()
}
Related videos on Youtube
Anthony Shahine
Updated on July 18, 2022Comments
-
Anthony Shahine almost 2 years
I have a
UIDatePicker
that shows the day, month and the year. But I don't know how to get those parameters.So What is the best way to get the day, month and year from
UIDatePicker
using Swift 3?-
Anbu.Karthik over 7 yearsyour qurestion is not clear
-
Anbu.Karthik over 7 yearscan you show ur tried code
-
Rajat over 7 yearsYou want to get selected date from picker ?
-
Ajay Singh Mehra over 7 yearsWhat kind of date picker you want , I mean to say that whether you want to embed date picker into your textfield or you just want to use as popover on the screen
-
-
Nirav D over 7 yearsOP has asked in Swift 3, So batter to use
DateComponents
instead ofNSDateComponents
andCalendar
instead ofNSCalendar
. -
vaibhav over 7 years@NiravD it's a version diff, anyway appreciating your contribution here +one for you also :)
-
dirtydanee over 7 years@vaibhav not calling
super
fromviewDidLoad
is a serious error. -
vaibhav over 7 years@dirtydanee that was formatting issue just rectified,
super
was already there. -
mfaani almost 6 yearsI didn't notice and made the mistake of registering my action with the
touchUpInside
event. Yet I should do it for.valueChanged
-
Albert Llorens Mestre almost 6 yearsYou can also use localized done and cancel bar buttons as follows (Swift 4, don't know in 3): let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(donedatePicker)) let cancelButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(cancelDatePicker))
-
Skoua about 5 yearsI didn't know about inputView... So much time won. Thanks!