【问题标题】:UITextField Custom Clear ButtonUITextField 自定义清除按钮
【发布时间】:2018-12-07 18:38:29
【问题描述】:

我正在尝试使用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)
    }
}

【问题讨论】:

  • 为什么要覆盖 clearClicked 方法?
  • 尝试将名称更改为其他名称或删除覆盖。
  • 没有线索,我只是从我在问题中提到的链接中提供的解决方案中复制了代码。我要删除它吗?
  • 我怀疑是图片问题clearButton.setImage(UIImage(named: "clear")!, for.normal)
  • 你粘贴错了,因为它的父类中不存在 clearClicked 方法。只是重命名它。或者更好的方法是扩展 uitextview。

标签: ios swift uitextfield swift4


【解决方案1】:

如前所述,在您的代码中,不应覆盖 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)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2018-09-17
    • 2014-10-28
    相关资源
    最近更新 更多