I followed this thread: datepicker by clicking on textfield
I imported both of the following protocols:
@interface ViewController : UIViewController&
Swift 4.2
You can achieve this by writing just one line of code using UITextField Extension.
Credit: http://www.swiftdevcenter.com/
import UIKit
extension UITextField {
func setInputViewDatePicker(target: Any, selector: Selector) {
// Create a UIDatePicker object and assign to inputView
let screenWidth = UIScreen.main.bounds.width
let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 216))//1
datePicker.datePickerMode = .date //2
self.inputView = datePicker //3
// Create a toolbar and assign it to inputAccessoryView
let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: screenWidth, height: 44.0)) //4
let flexible = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) //5
let cancel = UIBarButtonItem(title: "Cancel", style: .plain, target: nil, action: #selector(tapCancel)) // 6
let barButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector) //7
toolBar.setItems([cancel, flexible, barButton], animated: false) //8
self.inputAccessoryView = toolBar //9
}
@objc func tapCancel() {
self.resignFirstResponder()
}
}
In your UIViewController class write below code.
class ViewController: UIViewController {
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.myTextField.setInputViewDatePicker(target: self, selector: #selector(tapDone(sender:datePicker1:))) //1
}
//2
@objc func tapDone(sender: Any, datePicker1: UIDatePicker) {
print(datePicker1)
if let datePicker = self.myTextField.inputView as? UIDatePicker { // 2.1
let dateformatter = DateFormatter() // 2.2
dateformatter.dateStyle = .medium // 2.3
self.myTextField.text = dateformatter.string(from: datePicker.date) //2.4
}
self.myTextField.resignFirstResponder() // 2.5
}
}
For more detail visit: http://www.swiftdevcenter.com/uidatepicker-as-input-view-to-uitextfield-swift/