iPhone display date picker on UITextField touch

后端 未结 8 1469
一生所求
一生所求 2020-11-30 00:08

I followed this thread: datepicker by clicking on textfield

I imported both of the following protocols:

@interface ViewController : UIViewController&         


        
8条回答
  •  鱼传尺愫
    2020-11-30 00:44

    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/

提交回复
热议问题