带有日期选择器的文本字段在日期更改后迅速崩溃

时间:2018-08-11 01:23:53

标签: ios swift xcode datepicker textfield

我在设置一个文本字段时遇到麻烦。我的目标是代替键盘,但我希望它有滑动轮来指示时间。所以我在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)
}

现在,这对于打开文本字段看起来很不错,用于时间的滚动条会立即弹出,并且看起来很棒(哇!)。但是,当我更改时间时,应用程序崩溃(NSException)。我了解这通常发生在未正确建立连接的情况下,但是我无法弄清楚哪个连接,因为Selector的{​​{1}}应该触发功能textField。场景加载良好,就在我更改获取NSException的日期时。

我还尝试了是否使用datePickerValueChanged功能标签

我找到了其他三个类似问题的解决方案,但它们似乎对我没有用(可能已过时)。链接:

UIDatePicker crashing application

Inputting DatePicker in TextField problems

UITextField with DatePicker crashes

任何想法/想法将不胜感激。

1 个答案:

答案 0 :(得分:2)

要解决崩溃问题,请从

更改选择器
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)
}