2011-07-29 4 views
18

Tengo un UITextView en mi aplicación para el iPhone por lo que quiero ser capaz de alternar el autocorrectionType.Cómo alternar autocorrectionType de forma intermitente durante un UITextView existente

Cuando un usuario está editando la vista de texto, quiero que el autocorrectionType se establezca en UIAutocorrectionTypeYes. Cuando no se está editando la vista de texto, quiero que el autocorrectionType se establezca en UIAutocorrectionTypeNo (porque no quiero que ninguno de los subrayados-roja punteada generados por la corrección automática para ser visible)

simplemente conmutando el autocorrectionType como esto :

myTextView.autocorrectionType = UITextAutocorrectionTypeYes; 
myTextView.autocorrectionType = UITextAutocorrectionTypeNo; 

Parece que no funciona. ¿Existen limitaciones sobre cuándo puedo alternar el tipo de autocorrección o en qué situaciones cambia el tipo de autocorrección?

EDIT:

Para aclarar: No hay problemas de ajuste de la autocorrectionType al inicializar el UITextView. El problema surge cuando quiero cambiar el autocorrectionType para una UITextView existente. En mi caso quiero dar a los usuarios la ventaja de la corrección automática al editar un UITextView, pero no quieren tener errores de ortografía señalaron con el rojo salpicado subraya cuando el UITextView no está siendo editado - en parte porque también estoy exportación de una UIView que contiene el UITextView como una imagen. El problema es que el solo cambio del valor de la propiedad autocorrectionType de mi UITextView no funciona.

+0

¿debería utilizar spellCheckingType en lugar de autocorrectionType? –

Respuesta

10

Aquí está una manera fácil de hacer esto para el escenario de la exportación de imágenes:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    // Turn spell check on 
    textView.autocorrectionType = UITextAutocorrectionTypeYes; 
    return YES; 
} 


- (BOOL)textViewShouldEndEditing:(UITextView *)textView 
{ 
    // Turn spell check off and clean up red squiggles. 
    textView.autocorrectionType = UITextAutocorrectionTypeNo; 
    NSString *currentText = textView.text; 
    textView.text = @""; 
    textView.text = currentText; 
    return YES; 
} 
2

intentar llamar a -setNeedsDisplay en la vista de texto después de haber cambiado el autocorrectionType. Esto obligará a la vista de texto a volver a dibujarse y, con suerte, borrará los subrayados rojos.

myTextView.autocorrectionType = UITextAutocorrectionTypeNo; 
[myTextView setNeedsDisplay]; 
+1

Desafortunadamente eso no está haciendo el truco. – adriaan

6

Puede intentar primero ocultar primero el teclado y luego volver a mostrarlo. También actualice el uitextview. Si [UITextView setNeedsDisplay] no funciona para usted, trate [UITextView insertText:] y luego [UITextView deleteBackward]

[textView resignFirstResponde]; 
textView.autocorrectionType = UITextAutocorrectionTypeNo; 
[textView becomeFirstResponder]; 
[textView setNeedsDisplay]; 

o

[textView insertText:@" "]; 
[textView deleteBackward]; 
+0

¿Esto todavía funciona en iOS8 y el usuario nota que el teclado desaparece y aparece? –

3

Además de cambiar el tipo de corrección automática a UITextAutoCorrectionNo, la UITextView debe ser forzado a reevaluar su estado de corrección. setNeedsRedraw no es suficiente pero configura el texto para sí mismo, p.

textView.autocorrectionType = UITextAutocorrectionTypeNo; 
textView.text = textView.text; 

hace que las líneas discontinuas rojas desaparezcan. NOTA: esta solución se basa en el comportamiento no documentado y no se garantiza que funcione en futuras versiones de iOS.

Cuestiones relacionadas