如何在编辑时更改UITextField

时间:2017-01-03 19:24:58

标签: ios swift swift3 uitextfield

我的视图控制器中有多个UITextField,它也是一个文本字段委托。出于某种原因,以下代码仅在您没有选择任何文本字段后选择文本字段时才有效。如果我在文本字段之间切换,那么我要离开的文本字段会更改,但我正在编辑的文本字段不会更改为红色。我调试并发现即使在两者之间切换时也会调用这两种方法,但由于某种原因,它只是没有为您正在编辑的那个设置颜色。任何帮助是极大的赞赏。谢谢!

func textFieldDidBeginEditing(_ textField: UITextField) {
    self.setTextBorder(textField: textField, color: UIColor.red)
}

func textFieldDidEndEditing(_ textField: UITextField) {
     self.setTextBorder(textField: textField, color: UIColor.lightGray)
}

func setTextBorder(textField: UITextField, color: UIColor) {
    let border = CALayer()
    let width = CGFloat(2.0)
    border.borderColor = color.cgColor
    border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width:  textField.frame.size.width, height: textField.frame.size.height)
    border.borderWidth = width
    textField.layer.addSublayer(border)
    textField.layer.masksToBounds = true
}

修改

我现在创建了一个自定义类来测试,看看问题是否是我不断添加子图层的事实。我得到了相同的结果。这是我制作的自定义文本字段类:

class SpecialTextField: UITextField {

    var currentBorder: CALayer?

    func setTextBorder(color: UIColor) {
        let border = CALayer()
        let width = CGFloat(2.0)
        border.borderColor = color.cgColor
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        if (currentBorder == nil) {
            self.layer.addSublayer(border)
            self.layer.masksToBounds = true

        } else {
            self.layer.replaceSublayer(self.currentBorder!, with: border)
        }
        self.currentBorder = border
    }

}

2 个答案:

答案 0 :(得分:0)

你应该改变

中的文字颜色
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
    {
       // textfield.backgrounColor = UIColor.yourselectedcolor
        return true
    }

然后在endEditing委托方法中恢复颜色。

答案 1 :(得分:0)

为了设置我使用viewDidLayoutSubviews()的初始边框颜色,这导致了问题。它覆盖了我在编辑过程中更改的图层。