Cambiar attributes en una UITextView sin restablecer la propiedad Text atribuido

Tengo un UITextView que se analiza y que sus attributes cambian cuando se escriben ciertos caracteres. El text no se modifica, solo los attributes que describen el formatting del text.

Si analizo cada input de un personaje, básicamente estoy capturando el text , creando una cadena atribuida con el formatting correcto y estableciendo la propiedad attributedText de la vista de text a mi nueva cadena atribuida. Esto rompe totalmente la autocorrección, el acceso directo de doble espacio y la corrección ortográfica.

Si analizo solo cuando se escriben ciertos caracteres especiales, esto funciona un poco mejor, pero tengo errores extraños como si la segunda palabra de cada oración estuviera en mayúscula.

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (text.length == 0) { return YES; } unichar firstCharacterInText = [text characterAtIndex:0]; if (/* special character */) { [self processTextView]; } } - (void) processTextView { NSString *text = self.text; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text]; [attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:kFontRegular size:12.0f] range:NSMakeRange(0, text.length)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor textColor] range:NSMakeRange(0, text.length)]; // set other properties } 

Mi pregunta es: ¿hay alguna forma de cambiar los attributes de text de mi vista de text sin restablecer la propiedad attributedText de textview y romper todas esas útiles características de UITextView ?

Tuve el mismo problema y resultó que la propiedad attributedText de configuration de UITextView desencadenaba textViewDidChange: method. Por lo tanto, al establecer la propiedad attributedText desde inside textViewDidChange: method creó un bucle infinito.

Hice una solución rápida en la que regresaría inmediatamente de textViewDidChange: método cada vez que hago una llamada a ese método. Parece que funciona bien, pero todavía necesito verificar más.