2013-04-23 16 views
5

Ho un UITextView che viene analizzato e ha i suoi attributi modificati quando si digitano determinati caratteri. Il testo non viene modificato, solo gli attributi che descrivono la formattazione del testo.Modifica degli attributi su un UITextView senza reimpostare la proprietàTextText attribuita

Se analizzo ogni voce di carattere, essenzialmente sto prendendo il text, creando una stringa attribuita con la giusta formattazione e impostando la proprietà attributedText della vista testo sulla mia nuova stringa attribuita. Questo interrompe totalmente la correzione automatica, la scorciatoia a doppio spazio e il controllo ortografico.

Se analizzo solo quando si digitano determinati caratteri speciali, questo funziona un po 'meglio, ma ottengo strani bug come la seconda parola di ogni frase è in maiuscolo.

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

La mia domanda è: C'è un modo per cambiare gli attributi del testo del mio punto di vista del testo senza ripristinare proprietà del TextView attributedText e rompere tutte quelle funzioni utili di UITextView?

+0

Solo per i posteri: ho avuto lo stesso problema con la rottura automatica quando stavo impostando il testo attribuito in textViewDidChange/shouldChange e stavo per archiviare un radar quando ho capito che questo non è un bug: questo comportamento è causato dal fatto che la visualizzazione del testo cambia totalmente il suo contenuto ogni volta che viene immesso un nuovo carattere, quindi la correzione automatica, il collegamento a doppio spazio, ecc. non hanno la possibilità di funzionare. Non vedo una soluzione a questo, oltre all'esplorazione di CoreText. – ntesler

+0

Con iOS 7, puoi usare 'TextKit' per ottenere ciò che desideri. – fatuhoku

risposta

0

Ho avuto lo stesso problema e si è scoperto che l'impostazione attributedText proprietà di UITextView stata innescando textViewDidChange: metodo. Pertanto, impostando proprietà attribuita all'interno del testo textViewDidChange: il metodo ha creato un ciclo infinito.

Ho apportato una soluzione rapida in cui vorrei tornare immediatamente dal metodo textViewDidChange: ogni volta che effettuo una chiamata a tale metodo. Sembra funzionare bene, ma ho ancora bisogno di controllarne altri.

Problemi correlati