UITextField自定义清除按钮

时间:2018-12-07 18:38:29

标签: ios swift uitextfield swift4

我正在尝试使用Custom Clear Button

上的解决方案在文本字段中实现自定义清除按钮

它不起作用,它显示默认的清除按钮。知道为什么吗?以下是我的代码:

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 :(得分:0)

如前所述,在代码中,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)
    }
}