2013-04-10 25 views
5

我正在尋找一種將句子中第一個單詞的顏色與其餘句子顏色相區別的方法。 METHOD_001第一種顏色的整個字符串白色,然後重新着色前8個字符紅色。 METHOD_002使用字符串長度計算其餘字符並將它們着色爲白色之前,將前8個字符的顏色設爲紅色。使用addAttribute修改整個NSMutableAttributedString:

METHOD_001肯定是最好的,但我很好奇,如果有一個更簡單的方法,我希望找到一個NSMutableAttributedString addAttribute:未採取一系列和剛剛應用的屬性整個字符串,它似乎有點對NSMutableAttributedString的所有修改都要求您指定範圍的疏忽,我是否錯過了某些內容?

注意:代碼包括硬編碼的值,以幫助可讀性。

// 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

如果沒有什麼叫做METHOD_007,我會用001 – 2013-04-10 16:46:18

回答

5

其實有一個很簡單的方法來做到這一點。即使你爲你的標籤設置了一個屬性文本,首先它會被標籤的常規屬性風格化,然後你的屬性字符串會覆蓋相應的屬性。因此,如果事先使用[distanceLabel setTextColor:[UIColor whiteColor]](在故事板或代碼中),則只能使用attr重新着色所需的部分。字符串並達到您想要的效果。