Сбой приложения при нажатии кнопки панели выбора в iOS 12, но не в iOS 11 - PullRequest
0 голосов
/ 21 сентября 2018

Я использую пользовательское текстовое поле для отображения даты выбора и просмотра.Я добавил UIToolBar как inputAccessoryView.Я добавил готово и отменил кнопку., когда я нажимаю «Готово» и кнопку «Отмена» работает нормально в 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

Обновление

Приложение выходит из строя, когда клавиатура открыта, и оносодержит вспомогательный вид в качестве панели инструментов.Теперь, если я нажимаю кнопку навигации на панели навигации или кнопку панели инструментов, происходит сбой приложения.Я думаю, что это ошибка яблока.кто-нибудь нашел решение.

...