Ich habe mehrere UITextFields in meinem View-Controller, der auch ein Textfeld delegieren ist. Aus irgendeinem Grund funktioniert der folgende Code nur, wenn Sie ein Textfeld auswählen, nachdem Sie nicht ausgewählt haben. Wenn ich zwischen Textfeldern wechsle, ändert sich das Textfeld, das ich verlasse, aber das, das ich gerade bearbeite, ändert sich nicht zu Rot. Ich debuggte und fand heraus, dass beide Methoden aufgerufen werden, auch wenn zwischen den beiden umgeschaltet wird, aber aus irgendeinem Grund wird nur die Farbe für die, die Sie gerade bearbeiten, nicht festgelegt. Jede Hilfe wird sehr geschätzt. Vielen Dank!So ändern Sie UITextField beim Bearbeiten
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
}
EDIT
Ich habe jetzt eine benutzerdefinierte Klasse zu testen und zu sehen, ob das Problem war die Tatsache, dass ich Subschichten Zugabe gehalten. Ich bekomme die gleichen Ergebnisse. Hier ist die benutzerdefinierte Textfeld Klasse I gemacht:
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
}
}
Sie fügen mehr und mehr Ebenen zu einem bestimmten Textfeld hinzu, wenn Sie den Fokus hin und her ändern. – rmaddy
@rmaddy Das ist wahr. Ich glaube jedoch nicht, dass dies Auswirkungen haben sollte, wenn die Methode funktioniert. – Kendel
@rmaddy Ich habe die Frage mit dem, was ich versucht habe zu vermeiden, wiederholt mehrere Ebenen hinzufügen. Gleiches Ergebnis. – Kendel