Kann ich erkennen, die entf-Taste, auch wenn das UITextField leer ist?
Wenn UITextField nichts enthält, drücken Sie die entf-Taste der Tastatur nicht aufrufen, UITextFieldDelegate Methoden.
Wie kann ich das erkennen?
BEARBEITEN:
Es scheint keinen einfachen Weg, es zu tun. Die meisten nützliche links, die ich finden kann, sind:
-
UITextField : Jeder Weg, um erkennen Sie die Entf-Taste-event, wenn das Feld leer ist ?
-
Wie man die eigentliche Taste, die gedrückt in ein UITextField
Kurz gesagt, meine Lösung ist, um eine dauerhafte RAUM am Anfang von dem text-Feld. Und machen anderen weiteren änderungen(textFieldShouldReturn: textField:shouldChangeCharactersInRange:replacementString:, etc.).
- Siehe JacobCaraballo Antwort ist ein ähnliche Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es auch möglich, eine Taste mehr, aber das ist ein wenig instabil, da das Tastatur-layout ändern könnte, mit unterschiedlichen iOS Versionen und es sind sicherlich verschiedene Tastatur-layouts für verschiedene Sprachen.
Blick auf die "Verwaltung von Text-Felder und Text Views" Apple-doc. Ich bin sicher, es ist ein Weg, dies zu tun. Die so etwas wie ein UITextField implementiert ein Protokoll, um keyevents. Einer von denen wichtige Ereignisse wahrscheinlich werden die delete-Taste, so könnte man überschreiben, was auch immer Methode erhält diese und erhalten Sie auf diese Weise.
@"UIKeyboardCandidateCorrectionDidChangeNotification"
funktioniert, ist aber nicht dokumentiert, so könnte Apple apps ablehnen, die zu beobachten, diese Meldung name?Scheint dies machbar, indem bilden von Unterklassen UITextField. UITextField entspricht ein Protokoll namens UITextInput, die inturn entspricht einem anderen Protokoll namens UIKeyInput. UIKeyInput-Protokoll ist eine Methode deleteBackward, das feuert, jedes mal die backspace-Taste der Tastatur gedrückt wird.
Hier ist, wie es aussieht
Header
Umsetzung
PS: vergessen Sie nicht, rufen Sie super, weil Sie nicht wollen, um Chaos mit dem Standard-Verhalten von UITextField.
Ich bin das hinzufügen dieser Antwort für eine vollständige Beispiel in swift 3.
Im Grunde brauchte ich einen pincode geben sehen, wo ich mehrere text-Felder können ein Zeichen in jede Zelle.
wie diese
Ich begann durch erstellen einer Unterklasse von UITextField und ein Protokoll, das definiert eine neue func.
Dann erstellen Sie die Textfelder mit der neuen Unterklasse und Umsetzung der Stellvertretung in Ihrer view-controller. In meinem Fall Schaffe ich die Textfelder in einem array für die einfache Bedienbarkeit und das layout der Zellen mit PureLayout. Ich Speichere Sie, wie diese
var pinFields = UITextField
Dann in
viewDidLoad()
ich alle hinzufügen den pin-Felder in das array etwa so:Nun müssen Sie nur, reagieren auf die entsprechenden delegate-Methoden und die
textFieldDidChange
Ziel, das wurde oben Hinzugefügt.Lasse ich aus dem langweiligen Teile (wie das auslegen von text-Felder, etc), da dieser Allgemeine Funktionalität ist nützlich, in mehr Fällen als das Pin-Code-Ansicht, aber die Umsetzung dieses Kind-Klasse und Protokoll sollten alle, die Funktionalität, die Sie benötigen würden, die für ähnliche Ansichten, und löst die Frage auf der hand (was wahrscheinlich brauchen etwas ähnliches).
Happy coding.
Ok, ich habe es herausgefunden. so in der
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
delegate-Methode (d.h. wenn der text über die Eingabe) Sie einfach eine
weil für Sie die Rücktaste, text.Länge == 0, und sonst alles, was es wird == 1.
Dies kann umgesetzt werden, indem bilden von Unterklassen UITextField und das hinzufügen von es als benutzerdefinierte Klasse, die die gewünschte textfield.
Anschließend überschreiben Sie die Methode "deleteBackward"
Diese Methode wird fangen alle die backspace-Veranstaltungen.
Code in Swift:
Stellen Sie außerdem sicher, dass Sie sind dem Aufruf von super Methode, wie er die grundlegenden Funktionalitäten der Veranstaltung.
Legen Sie eine unsichtbare Schaltfläche über Sie.
Ich bin nicht sicher, aber können Sie versuchen, eine benutzerdefinierte Methode mit
addTarget: action: forControlEvents:
. Versuchen Sie, dieUIControlEventAllEditingEvents
option.UIControlEventAllEditingEvents
erfasst nicht löschen, wenn Textfeld leer ist. WederUIControlEventAllEvents
.Für Q1.
Swift 4.2 unten funktioniert bei mir
Wenn mit Tastatur, natürlich, Sie schreiben es, um einige Variablen (e.g: UITextField, UILabel oder auch eine Globale String)
Eine option zu erkennen, die löschen Aktion kann sein:
lastLengthOfText = 0;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
e.g :