2012-03-12 7 views
6

io sto cercando di fare più ricorrenze in una stringa attribuito grassetto usando qualcosa come il seguenteChi AttributeString - rendendo più occorrenze grassetto

[attrStr setFont:[UIFont ...] range:[attrStr.string rangeOfString:@"hello world"]]; 

Come sapete, 'rangeOfString' tornare sempre la prima occorrenza della partita. .. Sono ancora abbastanza nuovo per iOS, mi chiedo quale sia il modo migliore per impostare tutte le occorrenze in grassetto ... C'è qualche funzione fornita in NSString o qualcosa del genere?

Grazie in anticipo!

+0

Nessuna risposta dal poster originale per il risultato. – wuf810

risposta

22

Si dovrebbe prima provare a ottenere tutti gli intervalli nella stringa e quindi impostare l'attributo per ogni intervallo. Ci sono alcuni esempi grande codice proprio qui su StackOverflow: https://stackoverflow.com/a/4653266/381870

Edit:

Ecco un esempio per voi

- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str { 
    NSMutableArray *results = [NSMutableArray array]; 
    NSRange searchRange = NSMakeRange(0, [str length]); 
    NSRange range; 
    while ((range = [str rangeOfString:searchString options:0 range:searchRange]).location != NSNotFound) { 
     [results addObject:[NSValue valueWithRange:range]]; 
     searchRange = NSMakeRange(NSMaxRange(range), [str length] - NSMaxRange(range)); 
    } 
    return results; 
} 

Usage:

NSArray *results = [self rangesOfString:@"foo" inString:@"foo bar foo"]; 
NSLog(@"%@", results); 

ti dà

(
    "NSRange: {0, 3}", 
    "NSRange: {8, 3}" 
) 
+0

Grazie. Super awesome code (y) – ishhhh

+0

brillante answer..save my day –

0

Ti piacerebbe utilizzare NSScanner per eseguire la scansione del testo e sostituirlo. È possibile trovare un esempio per NSScanner here.

+0

Grazie a @Vignesh per le informazioni. Darò un'occhiata a questa opzione ... Ho scelto la soluzione di cui sopra perché è un po 'più coerente con la mia base di codice corrente. :) – Koolala

Problemi correlati