Wie kann ich UITextFieldDelegate.shouldChangeCharactersInRange mit benutzerdefinierter Eingabeansicht auslösen lassen?

8

Ich habe eine benutzerdefinierte Tastatur, die ich benutze, um den Text in mytextField zu bearbeiten, und es funktioniert großartig. Allerdings kann ich den Delegierten shouldChangeCharactersInRange niemals mit meiner benutzerdefinierten Tastatur ausführen. Es wird ausgeführt, wenn ich meine eigentliche Tastatur benutze (offensichtlich nicht die Standard-iPhone-Tastatur, da ich mytextField.inputView = numberPad.view eingestellt habe). Was muss ich tun, damit der shouldChangeCharactersInRange -Delegent über die benutzerdefinierte Tastatur ausgelöst wird? Übrigens ist die benutzerdefinierte Tastatur nur ein paar Knöpfe.

%Vor%     
docchang 12.01.2011, 21:01
quelle

3 Antworten

11

Das shouldChangeCharactersInRange wird nie mit einer benutzerdefinierten Tastatur aufgerufen.

Was Sie bekommen können, ist das Ereignis UIControlEventEditingChanged von UITextField . Anstatt sich auf shouldChangeCharactersInRange method zu verlassen (was zusätzlich bekannt ist, dass es fehlerhaft ist), sollten Sie sich auf dieses Ereignis verlassen, das jedes Mal ausgelöst wird, wenn der Benutzer den Inhalt des Textfelds ändert.

%Vor%

Wenn Sie das Textfeld mit Ihrer eigenen Tastatur ändern, rufen Sie diese Methode auf, um alle Listener des Ereignisses UIControlEventEditingChanged zu benachrichtigen.

%Vor%     
jptsetung 07.08.2011 13:04
quelle
0

Bearbeiten: Entschuldigung, habe deine Frage vorher falsch verstanden.

Ihr Textfeld ruft shouldChangeCharactersInRange auf, wenn es von der Systemtastatur eingegeben wird. Dadurch haben Sie die Möglichkeit zu bestimmen, ob der Text tatsächlich angezeigt werden soll (z. B. können Sie ihn zur Erkennung einer Verknüpfung implementieren) fügen Sie etwas längeren Text ein). Das Textfeld erkennt jedoch keine Eingaben von Ihrer benutzerdefinierten Ansicht als Texteingabe.

Wenn Sie eine benutzerdefinierte inputView haben, müssen Sie diese Methode nicht aufrufen - aktualisieren Sie einfach das Textfeld direkt von Ihrer IBAction:

%Vor%     
Christopher Pickslay 26.01.2011 01:59
quelle
0

Ich weiß, dass dies eine alte Frage ist, aber ich stieß auf das gleiche Problem, wenn ich Pre-5.0-Geräte unterstützen musste. Wenn Sie insertText überschreiben: Folgen Sie den Anweisungen von Rob in Ссылка Dann wird shouldChangeCharactersInRange jedes Mal ausgelöst.

Wenn Sie dann den Rückschrittschlüssel wie ich unterstützen müssen, können Sie die Antwort von @cormacrelf bei Wie simuliert man den Löschschlüssel auf UITextField?

Das einzige Problem, mit dem ich nicht umgehen konnte, ist, dass beim Löschen eines Zeichens aus der Mitte des Strings der Cursor zurück zum Ende des Strings springt.

    
SteveB 03.07.2012 15:30
quelle

Tags und Links