在iOS 12中但未在iOS 11中按下pickerView栏按钮时应用崩溃

时间:2018-09-21 19:09:49

标签: swift uitextfield uibarbuttonitem uitoolbar ios12

我正在使用自定义文本字段来显示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或附件工具栏的按钮应用程序将崩溃。我认为这是苹果虫。任何人都找到解决方案。

0 个答案:

没有答案