2015-07-17 23 views
11

In meiner iOS-Tastatur-App habe ich derzeit eine Textvorschlagsleiste, die der Vorschlagsleiste der iOS 8-Tastatur ähnelt. Ich möchte den gesamten Text in der Vorschlagsleiste löschen, wenn der Benutzer etwas tut, das das Textfeld löscht (z. B. wenn jemand "Send" auf iMessage oder WhatsApp trifft).Wie erkennt man von der iOS-Tastaturerweiterung, dass ein Textfeld durch Aktionen wie "Senden" in iMessage gelöscht wird?

Als das Drücken von "Senden" ist kein Tastendruck, ich frage mich, ob es eine Möglichkeit gibt, von der Tastatur zu erkennen, wenn ein Textfeld gelöscht wird.

Ich habe versucht, leeren Text "" oder neue Zeile "\n" zu erkennen, aber bis jetzt hat dies nicht funktioniert.

Edit: Ich weiß, dass dies durch 3rd-Party-iOS-Tastatur möglich ist, wie hier zu sehen (das ist von Themeboard)

Vor senden Schlagen, beachten Sie den Text in der Vorschlagsleiste.
Before hitting send

Sofort nach dem "Senden". Die Vorschlagsleiste ist gelöscht.
After hitting send

+0

Ich bin kein Experte in Tastaturerweiterung, aber gibt es irgendeine Methode, die Sie Änderungen in der TextField erkennen können? Dann können Sie löschen, wenn die Textlänge Null ist. – SFF

+0

@SFF Dies ist ein sehr guter Vorschlag. Ich habe versucht mit 'selbst.textDocumentProxy.documentContextBeforeInput' zu erkennen (was erkennt, was auf dem TextField ist), aber leider kann ich scheinen, um die Aktion zu finden, die bewirkt, dass' documentContextBeforeInput' gelöscht wird (dh wenn Send getroffen wird), also könnte ich Fügen Sie die entsprechende Methode ein, um dem zu folgen. – daspianist

+0

Ok, das ist eine schreckliche Idee, aber Sie können NSTimer setzen, die 'documentContextBeforeInput' alle 0,1 Sekunden aufruft. Natürlich wird es CPU wie verrückt benutzen, aber zumindest gibt es einen Weg. – SFF

Antwort

10

Wenn die Sendetaste in Nachrichten gedrückt wird, wird der textDidChange: Rückruf auf UIInputViewController Unterklasse aufgerufen werden. An diesem Punkt werden die Eigenschaften documentContextAfterInput und documentContextBeforeInput der UIInputViewController-Unterklasse textDocumentProxy -Eigenschaft Null oder die leere Zeichenfolge sein. Während Sie nicht wissen warum das Textfeld wurde gelöscht, können Sie wahrscheinlich für die meisten Fälle schließen, wo dies vorkommt, dass Sie Ihre aktuelle nächste Wortvorhersage löschen sollten.

- (void)textDidChange:(id<UITextInput>)textInput 
{ 
    if ((!self.textDocumentProxy.documentContextBeforeInput && !self.textDocumentProxy.documentContextAfterInput) || ([self.textDocumentProxy.documentContextBeforeInput isEqualToString:@""] && [self.textDocumentProxy.documentContextAfterInput isEqualToString:@""])){ 
     //Implement code to clear the banner 
     [self.keyboard.lblBanner setText: @""]; 
    } 
} 
+0

Das tat es! Danke Mann! Ich fügte die (sehr einfache) Codelösung der Antwort hinzu, um jedermann zu erleichtern, der den Code sucht, um in ihre Projekte zu integrieren. – daspianist