我正在使用自定义文本字段来显示datepicker和pickerview。我已将UIToolBar添加为inputAccessoryView
。我已添加完成并取消barbutton。 当我按完成并取消按钮操作时,在iOS 11中工作正常。但是在iOS 12应用程序中,点击条形按钮时会崩溃。由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__ UIButtonBarButton _setContentCoverViewMode:] :无法识别的选择器已发送到实例。
@IBDesignable
final class ICTextField: UITextField {
private var pickerView: UIPickerView?
/// To show the date or time input from textfield set this value to true
/// Default is false.
@IBInspectable open var isDatePicker: Bool = false {
didSet {
if self.isDatePicker {
self.inputView = self.datePicker
self.inputAccessoryView = self.configureToolBar()
}
self.reloadInputViews()
}
}
/// Shows the inputview as UITableView. able to select multiple option, default is false
@IBInspectable open var isDropDown: Bool = false {
didSet {
if isDropDown {
self.pickerView = UIPickerView()
self.pickerView?.dataSource = self
self.pickerView?.delegate = self
self.inputAccessoryView = self.configureToolBar()
self.inputView = self.pickerView
self.reloadInputViews()
} else {
self.inputView = nil
self.reloadInputViews()
}
}
}
// MARK: - Public Properties
let datePicker: UIDatePicker = {
let dateDropDown = UIDatePicker()
dateDropDown.datePickerMode = .date
dateDropDown.locale = Locale(identifier: "en_US_POSIX")
dateDropDown.addTarget(self, action: #selector(ICTextField.datePickerValueChanged(sender:)), for: .valueChanged)
return dateDropDown
}()
/// Tool bar to show cancel and done on top of textfield.
open var accessoryToolBar: UIToolbar? {
didSet {
self.inputAccessoryView = accessoryToolBar
self.reloadInputViews()
}
}
private func configureToolBar() -> UIToolbar {
let frame = CGRect(x: 0, y: 0, width: self.frame.width, height: 40.0)
let toolBar = UIToolbar(frame: frame)
toolBar.barStyle = .default
toolBar.barTintColor = UIColor(hex: "4db8ff")
let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(donePressed))
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelPressed))
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
toolBar.sizeToFit()
return toolBar
}
@objc fileprivate func donePressed() {
self.resignFirstResponder()
}
@objc private func cancelPressed() {
self.resignFirstResponder()
}
}
在viewcontroller中,我正在使用此textField对象。
icTextField.isDatePicker = true
更新
当键盘打开且包含附件视图作为工具栏时,应用程序崩溃。现在,如果我按导航栏的barbutton或附件工具栏的按钮应用程序将崩溃。我认为这是苹果虫。任何人都找到解决方案。