我的视图控制器中有多个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
}
}
答案 0 :(得分:0)
你应该改变
中的文字颜色func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
// textfield.backgrounColor = UIColor.yourselectedcolor
return true
}
然后在endEditing委托方法中恢复颜色。
答案 1 :(得分:0)
为了设置我使用viewDidLayoutSubviews()
的初始边框颜色,这导致了问题。它覆盖了我在编辑过程中更改的图层。