2010-08-21 28 views
7

Ich mache eine benutzerdefinierte Eingabemethode für das iPad, ich möchte in der Lage sein, die Systemtastatur durch meine Eingabemethode zu ersetzen und Text über diese Eingabemethode einzugeben.UITextView inputView

Gemäß der Dokumentation muss ich nur die Eigenschaft inputView mit meiner Ansicht festlegen und es wird anstelle der Systemtastatur verwendet. Ich habe das gemacht und es funktioniert, was das Zeigen der Tastatur angeht, aber wie gebe ich tatsächlich Text in die Textansicht ein?

Angeblich muss die Textansicht den UIKeyInput übernehmen und ich kann die Methoden des Protokolls verwenden, um den Text einzugeben, aber in Wirklichkeit nimmt UITextView dieses Protokoll nicht an. conformsToProtocol:@protocol(UIKeyInput) gibt NO zurück und "deleteBackwards" ist nicht implementiert (insertText und hasText sind implementiert. Außerdem führt "insertText" nicht dazu, dass die textViewDidChange: Delegate-Methode aufgerufen wird. Offensichtlich muss ich die UIKeyInput-Methode an ein anderes Objekt senden (ein Feld-Editor?), aber wie kann ich es bekommen?

Irgendwelche Ideen?

Antwort

5

Tastatur einige Tasten hat Angenommen, warum kann nicht Sie eine Auswahl für Ihre Schlüssel setzen gerade, und auf den Text Textviews anhängen, wenn jede Taste ist geklickt, ich habe dies getan und es funktioniert gut ... Hier ist die Methode, die tatsächlich das "Schreiben" in die UITextView, diese Methode ist Teil eines benutzerdefinierten Protokolls durch die inputView definiert und wird auf der Stellvertretung aufgerufen, wenn eine Schaltfläche ist Presse d, hoffe es hilft, beachte: ich übergebe ret, wenn die Return-Taste gedrückt wird und < - wenn Backspace gedrückt wird.

-(void)userDidInputString:(NSString*)s 
{ 
    NSRange r=padView.textView.selectedRange; 
    if([s isEqualToString:@"ret"]) 
     [email protected]"\n"; 
    if([s isEqualToString:@"<-"]) 
    { 
     NSString *text=padView.textView.text; 
     if(r.location>0) 
     { 
      r.location=r.location-1; 
      r.length+=1; 
     } 
       [padView.textView setScrollEnabled:YES]; 
     padView.textView.text=[text stringByReplacingCharactersInRange:r withString:@""]; 
     [padView.textView setScrollEnabled:NO]; 
     r.length=0; 
     [padView.textView setSelectedRange:r]; 
     [note setNoteText:padView.textView.text]; 

    } 
    else { 
     NSString *text=padView.textView.text; 

     [padView.textView setScrollEnabled:YES]; 
     padView.textView.text=[text stringByReplacingCharactersInRange:r withString:s]; 
       [padView.textView setScrollEnabled:NO]; 
     r.location=r.location+[s length]; 
     //whenever you modify the text by setting the UITextViews text property it resets the cursor to the end of the text view, we have this line below to go back to where the user left off 
     [padView.textView setSelectedRange:r]; 


      } 


} 
+0

Danke. Diese Lösung ist nett, aber ich möchte, dass die Textansicht tatsächlich die Bearbeitung durchführt (und sich normal verhält, komplett mit Autokorrektur usw.) und den Text nicht selbst bearbeitet. –

+7

Ich rief DTS darüber und es scheint, dass Ihre Lösung in der Tat die einzige Option ist. Ihre Antwort war, dass UIKeyInput (und UITextInput) nicht für den Client ist (das heißt, Sie sollten diese Methoden niemals selbst aufrufen), sondern nur für Ansichten, die Tastatureingaben erhalten möchten. –