2010-08-21 5 views
7

Je crée une méthode de saisie personnalisée pour l'iPad, je souhaite pouvoir remplacer le clavier système par ma méthode de saisie et entrer du texte via cette méthode de saisie. Selon la documentation, tout ce que je dois faire est de définir la propriété inputView avec ma vue et elle sera utilisée à la place du clavier système. Je l'ai fait et cela fonctionne, en ce qui concerne l'affichage du clavier, mais comment entrer du texte dans la vue de texte?UITextView inputView

Apparemment, la vue de texte doit adopter le UIKeyInput et je peux utiliser les méthodes du protocole pour entrer le texte mais en réalité UITextView n'adopte pas ce protocole. conformsToProtocol:@protocol(UIKeyInput) renvoie NON et "deleteBackwards" n'est pas implémenté (insertText et hasText sont implémentés.) En outre, "insertText" n'ouvre pas la méthode textViewDidChange: delegate.Evidemment je dois envoyer la méthode UIKeyInput à un autre objet (un éditeur de terrain?), mais comment puis-je obtenir?

des idées?

Répondre

5

en supposant que votre clavier a des boutons, pourquoi ne pouvez pas vous venez de définir un sélecteur pour vos clés, et ajouter au texte textViews lorsque chaque bouton est cliqué, je l'ai fait et ça marche bien ... Voici la méthode qui fait réellement "l'écriture" à UITextView, cette méthode fait partie d'un protocole personnalisé défini par inputView et est appelée sur le délégué chaque fois qu'un bouton est la presse d, j'espère que ça aide, notez: je soumets ret quand la touche de retour est enfoncée et < - quand le retour arrière est poussé.

-(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

Merci. Cette solution est sympa, mais j'aimerais que la vue texte fasse réellement l'édition (et se comporte normalement, complète avec autocorrection et ainsi de suite) et ne modifie pas le texte moi-même. –

+7

J'ai appelé DTS à ce sujet et il semble que votre solution est en effet la seule option. Leur réponse a été que UIKeyInput (et UITextInput) n'est pas pour le client (c'est-à-dire que vous n'êtes pas censé invoquer ces méthodes vous-même), mais uniquement pour les vues qui souhaitent recevoir une entrée au clavier. –