У меня проблемы с настраиваемым текстовым полем. Цель - вместо клавиатуры, я хочу, чтобы у нее были колесики для индикации времени. Итак, внутри viewDidLoad() я поместил:
let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.time
datePicker.addTarget(self, action: Selector("datePickerValueChanged"), for: UIControlEvents.valueChanged)
textField.inputView = datePicker
И внутри ViewController () я поместил:
@objc func datePickerValueChanged(sender: UIDatePicker) {
let DatePickerView: UIDatePicker = UIDatePicker()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm"
textField.text = dateFormatter.string(from: DatePickerView.date)
}
Теперь это отлично подходит для открытия текстового поля, полосы прокрутки времени всплывают и выглядят великолепно (Woot!). Но когда я меняю время, приложение вылетает (NSException). Я понимаю, что это обычно происходит, когда соединение не установлено должным образом, но я не могу понять, какое соединение, поскольку Selector для textField должно запускать функцию datePickerValueChanged. Сцена загружается нормально, только когда я меняю дату, я получаю NSException.
Я также пробовал с / без метки функции @objc
Я нашел решения еще трех похожих вопросов, но они, похоже, не помогли мне (возможно, устарели). Ссылки:
Ввод DatePicker в проблемы с текстовым полем
UITextField с DatePicker аварийно завершает работу
Любые мысли / идеи будут очень признательны.





Чтобы исправить сбой, измените свой селектор с
datePicker.addTarget(self, action: Selector("datePickerValueChanged"), for: UIControlEvents.valueChanged)
к
datePicker.addTarget(self, action: #selector(datePickerValueChanged), for: .valueChanged)
и в вашем методе:
@objc func datePickerValueChanged(_ sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "hh:mm a" // or "HH:mm"
textField.text = dateFormatter.string(from: sender.date)
}
замените
Selector("datePickerValueChanged")на#selector(datePickerValueChanged)и заменитеDatePickerView.dateнаsender.dateи удалите этот кодlet DatePickerView: UIDatePicker = UIDatePicker()