Пользовательская кнопка очистки UITextField - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь реализовать пользовательскую кнопку очистки в текстовом поле, используя решение для Пользовательская кнопка очистки

Не работает, отображается кнопка очистки по умолчанию.Есть идеи почему?Вот мой код:

class CustomTextField: UITextField {

    override init(frame: CGRect) {
        super.init(frame: frame)

        let clearButton = UIButton(frame: CGRect(x: 0, y: 0, width: 16, height: 16))
        clearButton.setImage(UIImage(named: "Glyph/16x16/Clear")!, for: [])

        self.rightView = clearButton
        clearButton.addTarget(self, action: #selector(clearClicked), for: .touchUpInside)

        self.clearButtonMode = .never
        self.rightViewMode = .whileEditing
    }

    @objc override func clearClicked(sender:UIButton)
    {
        self.text = ""
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

1 Ответ

0 голосов
/ 08 декабря 2018

Как уже упоминалось, в вашем коде метод clearClicked не должен переопределяться, так как UITextField не имеет метода clearClicked для переопределения.

Во всяком случае, я обновил код для работы при использовании его с раскадровками.Добавлен метод awakeFromNib, который вызывает код инициализации.

class CustomTextField: UITextField {

    override open func awakeFromNib() {
        super.awakeFromNib()
        self.initialize()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initialize()
    }

    func initialize() {
        let clearButton = UIButton(frame: CGRect(x: 0, y: 0, width: 16, height: 16))
        clearButton.setImage(UIImage(named: "Glyph/16x16/Clear")!, for: [])

        self.rightView = clearButton
        clearButton.addTarget(self, action: #selector(clearClicked), for: .touchUpInside)

        self.clearButtonMode = .never
        self.rightViewMode = .whileEditing
    }

    @objc func clearClicked(sender:UIButton)
    {
        self.text = ""
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}
...