2010-08-21 11 views
7

Estoy haciendo un método de entrada personalizado para el iPad, quiero ser capaz de reemplazar el teclado del sistema con mi método de entrada e ingresar texto a través de ese método de entrada.UITextView inputView

De acuerdo con la documentación, todo lo que tengo que hacer es establecer la propiedad inputView con mi vista y se usará en lugar del teclado del sistema. Lo hice y funciona, en cuanto a mostrar el teclado, pero ¿cómo introduzco el texto en la vista de texto?

Supuestamente, la vista de texto debe adoptar la UIKeyInput y puedo usar los métodos del protocolo para ingresar el texto pero, en realidad, UITextView no adopta este protocolo. conformsToProtocol:@protocol(UIKeyInput) devuelve NO y "deleteBackwards" no está implementado (insertText y hasText están implementados. Además de eso, "insertText" no hace que se invoque el método delegado textViewDidChange:. Obviamente tengo que enviar el método UIKeyInput a algún otro objeto (un editor de campo?), pero ¿cómo lo consigo?

¿Alguna idea?

Respuesta

5

Asumiendo que su teclado tiene algunos botones, porqué el canto que acaba de establecer un selector para las llaves, y anexar al texto textViews cuando cada botón se hace clic, lo he hecho y funciona bien ... Aquí está el método que realmente hace la "escritura" en el UITextView, este método es parte de un protocolo personalizado definido por el inputView y se llama al delegado cada vez que un botón está presionado d, espero que ayude, nota: presento ret cuando se presiona la tecla de retorno y < - cuando se presiona el retroceso.

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

Gracias. Esta solución es buena, pero me gustaría que la vista de texto realmente haga la edición (y se comporte normalmente, complete la autocorrección, etc.) y no edite el texto yo mismo. –

+7

Llamé a DTS sobre esto y parece que su solución es la única opción. Su respuesta fue que UIKeyInput (y UITextInput) no es para el cliente (es decir, se supone que nunca debe invocar estos métodos) sino solo para las vistas que desean recibir información del teclado. –

Cuestiones relacionadas