Возврат значения из UIDatePicker при наличии нескольких UITextField

У меня есть несколько UITextField, и некоторые из них будут использовать «UIDatePicker». Как я могу вернуть значение из UIDatePicker без необходимости кодировать textField.text = formatter.stringFromDate(datePicker.date) в функции datePickerChanged?

func textFieldDidBeginEditing(textField: UITextField) {
    switch textField.tag {

        //tag = 3 is the text field that needs the date
    case 3:
        let datePicker = UIDatePicker()
        textField.inputView = datePicker
        datePicker.addTarget(self, action: "datePickerChanged:", forControlEvents: .ValueChanged)
        //textField.text = value returned from datePickerChanged
    default: break
    }
}

func datePickerChanged(datePicker: UIDatePicker) {
    let formatter = NSDateFormatter()
    formatter.dateStyle = .MediumStyle
    let dateTextValue = formatter.stringFromDate(datePicker.date)
    // how can I return (dateTextValue)?
}

person Sami    schedule 09.04.2016    source источник


Ответы (1)


Вы можете создать переменную с именем currentTextField и в своем операторе case присвоить textField currentTextField. Тогда ваша функция datePickerChanged(_:) может использовать currentTextField для установки даты.

person 7stud    schedule 09.04.2016
comment
Спасибо за ответ. Хм, ладно, как мне инициализировать currentTextField? Может я не совсем понимаю - person Sami; 10.04.2016
comment
@Sami, var currentTextField: UITextField? Это инициализирует currentTextField до нуля. Упс, это не должен быть @IBOutlet. - person 7stud; 10.04.2016
comment
Возможно, вы даже сможете объявить переменную как неявно развернутую необязательную: var currentTextField: UITextField!, что облегчит работу с переменной. - person 7stud; 10.04.2016
comment
Да, это сработало, и я оставил функцию общей. Спасибо :) - person Sami; 10.04.2016
comment
@ Сами, мне кажется странным, что вы добавляете цель внутри textFieldDidBeginEditing(_:). Итак, каждый раз, когда пользователь начинает редактировать одно и то же текстовое поле, вы хотите добавить цель? Почему бы не добавить все цели для текстовых полей внутри loadView()/viewDidLoad() ViewController'а? - person 7stud; 10.04.2016
comment
В учебном пособии сказано, что нужно делать так: слепо следуя за слепым, которого я вижу. Если я перейду на размещение его в viewDidLoad, смогу ли я избежать использования моего подхода tag? - person Sami; 10.04.2016
comment
@Sami, да - по-видимому, вы знаете, с какими UITextFields вы хотите использовать DatePicker, но если у вас много TextField, вам может понадобиться использовать аналогичную конструкцию, чтобы перебирать их и выбирать, какие из них вам нужно добавить нацелены на. Но преимущество этого заключается в том, что пользователь продолжает выбирать разные текстовые файлы — ваш код не будет постоянно добавлять цель. - person 7stud; 10.04.2016