2011-12-14 17 views
7

Esto parece imposible, pero tal vez alguien más ha tenido el mismo problema.Confirmar UITextview autocompletar

¿Es posible para mí aceptar una autocompletar programáticamente o de alguna manera obtener la palabra sugerida que aparece? Mi problema es que estoy capturando la tecla de retroceso/retroceso y luego muevo el foco a otra vista de texto. Cuando se pulsa enter/backspace, la vista de texto ignorará la palabra sugerida automáticamente. Parece que solo es posible aceptar un autocompletado por hit space/dot (y volver por una nueva fila). Con este código:

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
           replacementText:(NSString *)text { 
    NSRange textViewRange = [textView selectedRange]; 

    // Handle newrow and backspace. 
    if(([text length] == 0) && (textViewRange.location== 0) && textViewRange.length==0){ 
     // BACKSPACE KEYSTROKE 
     [delegate doSomethingWhenBackspace]; 
     return NO;  
    }else if ([text isEqualToString:@"\n"]){  
     // RETURN KEYSTROKE 
     [delegate doSomethingWhenReturn];  
     return NO;  
    } 

    return YES; 
} 

He intentado añadir programación "espacio" cuando la tecla de retorno es golpeado, sino que también ignora la palabra de auto-completado.

else if ([text isEqualToString:@"\n"]){ 
       // Tryin to accept autocomplete with no result. 
       textview.text = [textview.text stringByAppendingString:@" "]; 
      // RETURN KEYSTROKE 
      [delegate doSomethingWhenReturn];  
      return NO;  
     } 

¿Alguna sugerencia?

Respuesta

-3

Tuve un problema muy similar, estaba haciendo una aplicación que tenía que leer todas las letras en una vista de texto y tengo problemas cuando las palabras de Autocompletar se insertaron porque se estaba guardando como si fuera una sola letra. puede agregar cada carácter a una matriz y luego verificar si alguno tiene más de 1 cadena de longitud. O se podría añadir a cada personaje que se pone en en una matriz y luego ejecutar algo así como

NSString *string = text; 
NSMutableArray *array = [NSMutableArray new]; 
for (int i=0; i<string.length; i++) { 
[array addObject:[string substringWithRange:NSMakeRange(i, 1)]]; 
} 

añadir cada carácter individual, mediante la comparación de las dos matrices se podía determinar si autocorrección se ha utilizado y con qué palabra/s . Espero que esto ayude.

+0

Esta es una manera realmente terrible de lograr esto. Cambie las propiedades de 'firstResponder' de' UITextView'/'UITextField' en su lugar para que UIKit realice el trabajo de autocompletado por usted. – cbowns

0

Para la tecla de retroceso y el espacio u puede utilizar esta condición

if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) 
{  
[delegate doSomethingWhenBackspace];  
return NO;  
} 
4

Call -resignFirstResponder (es decir [textView resignFirstResponder]) en la vista de texto o campo de texto que debe aceptar los resultados de autocompletar: UIKit cambiará el .text propiedad para incluir el texto autocorregido.

Si desea mantener el teclado en alto después de que su primera vista haya salido de la primera respuesta, pase la responsabilidad firstResponder a su próxima vista de entrada de texto con [anotherTextView becomeFirstResponder].