2013-04-10 8 views
5

私は、文中の最初の単語の色を、文の残りの色と異なる色にする方法を探しています。 METHOD_001最初の色は文字列全体を白くし、最初の8文字は赤色にします。 METHOD_002残りの文字を計算するために文字列の長さを使用する前に最初の8文字を赤で色付けし、白色にします。addAttributeを使用してNSMutableAttributedString全体を変更します。

METHOD_001は間違いなくベストですが、私は簡単な方法がある場合、私は範囲を取り、単に文字列全体に属性を適用していなかったNSMutableAttributedString addAttribute:を見つけるために期待していた好奇心、それは少し思えますNSMutableAttributedStringのすべての変更で範囲を指定する必要があることを監視していますが、何か不足していますか?

NB:コードには、読みやすいようにハードコードされた値が含まれています。

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

答えて

5

実際にそれを行うのは簡単な方法です。属性付きのテキストをラベルに設定しても、ラベルの通常のプロパティでスタイルを設定すると、属性付きの文字列が対応する文字列をオーバーライドします。したがって、事前に[distanceLabel setTextColor:[UIColor whiteColor]](ストーリーボードまたはコード内で)を行う場合は、attrを使用して必要な部分のみを再描画することができます。あなたの望む効果を達成してください。

関連する問題