我的視圖控制器中有多個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
}
}
當您前後改變焦點時,您不斷向給定的文本字段添加越來越多的圖層。 – rmaddy
@rmaddy這是真的。但是,我不相信這種方法可以起作用。 – Kendel
@rmaddy我已經更新了我試圖避免重複添加更多圖層的問題。同樣的結果。 – Kendel