更改焦点上的文本字段

Change textfield on focus

我实现了一个未划线的 UITextField - 因此我添加了两个函数,即 underlined()underlinedGrey

我工作正常,但我希望文本字段最初是 textfield.underlinedGrey(),一旦文本字段被聚焦:textfield.underlined()

我该如何实施?我已经浏览过网页,我发现我必须添加一个事件侦听器,但到目前为止对我没有任何作用。

编辑:

extension UITextField {

    func clear () {
        self.layer.sublayers?.forEach {
            if [=10=] is CAGradientLayer {
                [=10=].removeFromSuperlayer()
            }
        }
    }

    func underlined(){
        clear()
        let color = UIColor(red: 11/255, green: 95/255, blue: 244/255, alpha: 1).cgColor
        let sndColor = UIColor(red: 124/255, green: 206/255, blue: 254/255, alpha: 1).cgColor

        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.colors = [color, sndColor]
        gradient.locations = [0.0, 0.8]
        gradient.startPoint = CGPoint(x: 0, y: 0)
        gradient.endPoint = CGPoint(x: 1, y: 0)
        let width = CGFloat(3.0)
        gradient.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)

        self.layer.insertSublayer(gradient, at: 0)
        self.layer.masksToBounds = true
    }

    func underlinedGrey(){
        clear()
        let color = UIColor(red: 112/255, green: 112/255, blue: 112/255, alpha: 0.4).cgColor

        let border = CALayer()
        let width = CGFloat(3.0)
        border.borderColor = color
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }
}

符合UITextFieldDelegate然后实施

func textFieldDidBeginEditing(_ textField: UITextField) {
  textField.underlined()
}
func textFieldDidEndEditing(_ textField: UITextField) {
  textField.underlinedGrey()
}

清除

extension UITextField {
   func clear () {
     self.layer.sublayers?.forEach {
       if [=11=] is CAGradientLayer || [=11=].name == "MyLayer" {
          [=11=].removeFromSuperlayer()
       }
    }
 }

 let border = CALayer()
 border.name = "MyLayer"
 let width = CGFloat(3.0)
 border.borderColor = color