iOS
UITextField-Delegat
Suche…
UITextField - Beschränkt das Textfeld auf bestimmte Zeichen
Wenn Sie eine Überprüfung der Benutzereingabe Ihres Textfelds durchführen möchten, verwenden Sie den folgenden Code-Snippet:
// MARK: - UITextFieldDelegate
let allowedCharacters = CharacterSet(charactersIn:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz").inverted
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let components = string.components(separatedBy: allowedCharacters)
let filtered = components.joined(separator: "")
if string == filtered {
return true
} else {
return false
}
}
Ziel c
#define ACCEPTABLE_CHARACTERS @"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
Darüber hinaus können Sie die von Apple bereitgestellten Zeichensätze zur Validierung verwenden:
Besuchen Sie https://developer.apple.com/reference/foundation/nscharacterset
let allowedCharacters = CharacterSet.alphanumerics.inverted
let allowedCharacters = CharacterSet.capitalizedLetters.inverted
Nächstes Tag suchen und Tastatur verwalten
Das Textfeld ruft verschiedene Delegatmethoden auf (nur wenn Delegaten gesetzt sind). Eine von Textfeld aufgerufene Delegatmethode ist * - (BOOL) textFieldShouldReturn: (UITextField ) textField
Diese Methode wird aufgerufen, wenn Benutzer auf die Zurück-Schaltfläche tippen. Mit dieser Methode können Sie jedes benutzerdefinierte Verhalten implementieren.
Zum Beispiel,
Im folgenden Beispiel wird der nächste Responder anhand des Tags ermittelt und die Tastatur verwaltet. Hier ist 20 die Konstante, As-Tag, das dem Textfeld zugewiesen ist, ist wie folgt: 50,70,90 usw.
Beim Suchen eines neuen Textfeldobjekts als Responder wird das aktuelle Textfeld als neuer Responder erstellt und die Tastatur entsprechend geöffnet.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSInteger nextTag = textField.tag+20;
// Try to find next responder
UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder)
{
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
}
else
{
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return YES;
}
Aktionen, wenn ein Benutzer die Interaktion mit einem Textfeld gestartet / beendet hat
Für Swift 3.1:
Im ersten Beispiel kann man sehen, wie Sie den Benutzer abhalten, der während des Schreibens mit einem Textfeld interagiert. In ähnlicher Weise gibt es in UITextFieldDelegate Methoden, die aufgerufen werden, wenn ein Benutzer seine Interaktion mit einem TextField gestartet und beendet hat.
Um auf diese Methoden zugreifen zu können, müssen Sie das UITextFieldDelegate- Protokoll einhalten und für jedes Textfeld, über das Sie benachrichtigt werden möchten, die übergeordnete Klasse als Delegat zuweisen:
class SomeClass: UITextFieldDelegate {
@IBOutlet var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
}
Jetzt können Sie alle UITextFieldDelegate-Methoden implementieren.
Um benachrichtigt zu werden, wenn ein Benutzer mit der Bearbeitung eines Textfelds begonnen hat, können Sie die textFieldDidBeginEditing (_ :) -Methode wie folgt implementieren:
func textFieldDidBeginEditing(_ textField: UITextField) {
// now you can perform some action
// if you have multiple textfields in a class,
// you can compare them here to handle each one separately
if textField == emailTextField {
// e.g. validate email
}
else if textField == passwordTextField {
// e.g. validate password
}
}
Wenn Sie benachrichtigt werden, wenn ein Benutzer die Interaktion mit einem Textfeld beendet hat, können Sie die textFieldDidEndEditing (_ :) -Methode wie folgt verwenden :
func textFieldDidEndEditing(_ textField: UITextField) {
// now you can perform some action
// if you have multiple textfields in a class,
// you can compare them here to handle each one separately
if textField == emailTextField {
// e.g. validate email
}
else if textField == passwordTextField {
// e.g. validate password
}
}
Wenn Sie steuern möchten, ob ein TextField mit der Bearbeitung beginnen / beenden soll, können die Methoden textFieldShouldBeginEditing (_ :) und textFieldShouldEndEditing (_ :) verwendet werden, indem Sie entsprechend Ihrer erforderlichen Logik true / false zurückgeben.