2013-04-10 24 views
5

Poszukuję sposobu na kolorowanie pierwszego słowa w zdaniu w innym kolorze niż w pozostałej części zdania. METHOD_001 najpierw koloruje cały ciąg biały, a następnie zmienia kolory pierwszych 8 znaków na czerwono. METHOD_002 Koloruje pierwsze 8 znaków na czerwono, przed użyciem długości ciągu do obliczenia pozostałych znaków i pokolorowania ich na biało.Modyfikowanie całego NSMutableAttributedString za pomocą metody addAttribute:

METHOD_001 jest zdecydowanie najlepsze, ale jestem ciekaw, czy istnieje prostszy sposób, spodziewałem się znaleźć NSMutableAttributedString addAttribute: że nie miała zasięg i stosowane tylko atrybut do całego łańcucha, wydaje się nieco niedopatrzenia, że ​​wszystkie modyfikacje do NSMutableAttributedString wymagają określenia zakresu, czy czegoś brakuje?

NB:Kod zawiera zakodowane wartości, aby ułatwić czytelność.

// METHOD_001 
NSMutableAttributedString *attrString_001 = [[NSMutableAttributedString alloc] initWithString:@"Distance 1720 mm" attributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 
[attrString_001 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)]; 
[[self nameLabel] setAttributedText:attrString_001]; 

// METHOD_002 
NSString *string = @"Distance 1720 mm"; 
NSUInteger stringLength = [string length]; 
NSMutableAttributedString *attrString_002 = [[NSMutableAttributedString alloc] initWithString:string]; 
[attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)]; 
[attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(9, (stringLength-9))]; 
[[self distanceLabel] setAttributedText:attrString_002]; 
+0

Jeśli nie ma nic o nazwie METHOD_007, chciałbym iść z 001 –

Odpowiedz

5

W rzeczywistości istnieje dość łatwy sposób to zrobić. Nawet jeśli ustawisz przypisany tekst na etykiecie, najpierw jest on stylizowany przez zwykłe właściwości etykiety, wtedy Twój nadany ciąg zastępuje odpowiednie. Więc jeśli wcześniej wykonałeś [distanceLabel setTextColor:[UIColor whiteColor]] (w scenorysie lub kodzie), możesz ponownie kolorować tylko potrzebne części używając attr. ciągi i osiągnąć pożądany efekt.

Powiązane problemy