1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! fileprivate var tmpSelectedDate:String = "" override func viewDidLoad() { super.viewDidLoad() pickerViewInit() // Do any additional setup after loading the view. } } extension ViewController { //MARK:pickerView //***************************************************** func pickerViewInit(){ //Create a parent view for UIPickerView let pickerViewWrpper = UIView(frame: CGRect(x:0, y: 200, width: self.view.bounds.width, height: 200)) pickerViewWrpper.backgroundColor = .clear //create UIPickerView object let datepicker = UIDatePicker( ) datepicker.backgroundColor = .clear //add UIPickerView into parent view pickerViewWrpper.addSubview(datepicker) datepicker.datePickerMode = UIDatePicker.Mode.date //add some constraint to UIPickerView datepicker.translatesAutoresizingMaskIntoConstraints = false datepicker.leadingAnchor.constraint(equalTo: pickerViewWrpper.leadingAnchor, constant: 0).isActive = true datepicker.trailingAnchor.constraint(equalTo: pickerViewWrpper.trailingAnchor, constant: 0).isActive = true datepicker.bottomAnchor.constraint(equalTo: pickerViewWrpper.bottomAnchor, constant: 0).isActive = true datepicker.heightAnchor.constraint(equalToConstant: 170).isActive = true datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged) //set data source and other stuff //create UIToolbar object let toolBar = UIToolbar() //add UIToolbar into parent view pickerViewWrpper.addSubview(toolBar) //add some constraint to UIToolbar toolBar.translatesAutoresizingMaskIntoConstraints = false toolBar.leadingAnchor.constraint(equalTo: pickerViewWrpper.leadingAnchor, constant: 0).isActive = true toolBar.trailingAnchor.constraint(equalTo: pickerViewWrpper.trailingAnchor, constant: 0).isActive = true toolBar.topAnchor.constraint(equalTo: pickerViewWrpper.topAnchor, constant: 0).isActive = true toolBar.heightAnchor.constraint(equalToConstant: 30).isActive = true //add some style to UIToolbar toolBar.barStyle = UIBarStyle.default toolBar.isTranslucent = true // toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) toolBar.sizeToFit() //int done and cancelButton buttons let doneButton = UIBarButtonItem(title: "Select", style: UIBarButtonItem.Style.plain, target: self, action: #selector(donePicker)) let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItem.Style.plain, target: self, action: #selector(cancelPicker)) toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) toolBar.isUserInteractionEnabled = true //set inputView when we enter in text field this view will show insted of keyboard textField.inputView = pickerViewWrpper } @objc func donePicker(){ textField.resignFirstResponder() textField.text = tmpSelectedDate } @objc func cancelPicker(){ textField.resignFirstResponder() } @objc func dateChanged(_ sender: UIDatePicker) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/yyyy" tmpSelectedDate = dateFormatter.string(from: sender.date) //Uncomment if user wants to update text field date same time when user change date // childDOB.text = dateFormatter.string(from: sender.date) } //***************************************************** //End pickerView } |