【发布时间】:2017-09-15 08:37:10
【问题描述】:
我正在使用 Swift 3 在 Xcode 8.3.3 和 iOS 10.3 上学习 iOS 开发。我正在尝试创建一个帐户创建表单,其中包含一个字段,当用户在出生日期执行润色时显示 UIDatePicker UITextField:
@IBAction func showDatePicker(_ sender: UITextField) {
let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.date
datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: -16, to: Date())
dateOfBirth.inputView = datePicker
datePicker.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged)
}
@objc func datePickerValueChanged(_ picker: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = DateFormatter.Style.medium
dateFormatter.timeStyle = DateFormatter.Style.none
dateOfBirth.text = dateFormatter.string(from: picker.date)
}
当我执行上述操作时,我得到了错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextField date]: unrecognized selector sent to instance 0x7f89277121c0'
在我看来,它似乎试图将 UITextField 'sender' 值注入到 datePickerValueChanged 字段中,该字段应该采用 UIDatePicker 类型的值,从而导致错误。我尝试将其更改为我将 datePicker 对象显式传递给 datePickerValueChanged 方法的位置:
datePicker.addTarget(self, action: #selector(self.datePickerValueChanged(datePicker)), for: UIControlEvents.valueChanged)
但是 Xcode 然后给了我一个错误:
Argument of '#selector' does not refer to an '@objc' method, property, or initializer
我的函数前面有@objc,所以我很困惑为什么它不允许这样做。
所以,我的终极问题是:如何确保传递给 datePickerValueChanged 的值是 UIDatePicker 类型,即 datePicker 对象?
【问题讨论】:
-
您是否尝试过清理或重建项目?
-
日期选择器首次出现时是否会出现此错误,或者您在选择器中选择日期时是否会出现此错误?
-
我尝试清洁,但仍然失败。此外,这发生在日期选择器甚至显示之前。