简体   繁体   中英

Two textfield with same date picker

I have two textfields that I want to input times into. I've gotten one of the textfields to work so that the inputView is a date picker, however, I can't figure out if there's an easy way to change my code so that the other text field would also have a date picker as the input field.

Here is my code:

func createDatePicker(){
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    //done button
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed))
    toolbar.setItems([done], animated: false)

    fromTextField.inputAccessoryView = toolbar
    fromTextField.inputView = picker


    picker.datePickerMode = .time
    picker.minuteInterval = 15

}
@objc func donePressed(){
    let formatter = DateFormatter()
    formatter.dateStyle = .none
    formatter.timeStyle = .short
    let dateString = formatter.string(from: picker.date)

    fromTextField.text = "\(dateString)"
    self.view.endEditing(true)

}

What would be the best way to make this code work for a toTextField too besides just making a copy of these two functions?

For creating two textFields having same pickerView as inputView @CZ54's answer is correct ie

func createDatePicker(forField field : UITextField){
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    //done button
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed))
    toolbar.setItems([done], animated: false)

    field.inputAccessoryView = toolbar
    field.inputView = picker


    picker.datePickerMode = .time
    picker.minuteInterval = 15

}

//later
self.createDatePicker(forField: fromTextField)
self.createDatePicker(forField: toTextField)

And to fetch data from pickerView as per the active textField you have to create a variable of type UITextField and assign it as following:

var activeTextField: UITextField!

func textFieldDidBeginEditing(_ textField: UITextField) {
     activeTextField = textField
}

And whenever row would be selected in pickerView, by following you could perform relevant actions

if activeTextField == fromTextField {
     //action
} else if activeTextField == toTextField {
     //action
}

You can do :

func createDatePicker(forField field : UITextField){
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    //done button
    let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed))
    toolbar.setItems([done], animated: false)

    field.inputAccessoryView = toolbar
    field.inputView = picker


    picker.datePickerMode = .time
    picker.minuteInterval = 15

}

//later
self.createDatePicker(forField: fromTextField)
self.createDatePicker(forField: toTextField)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM