1. ホーム
  2. アイオス

[解決済み】NSAttributedStringはどのように使うのですか?

2022-03-27 21:30:08

質問

複数のカラーを NSString または NSMutableStrings は不可能です。そこで、少し聞いたことがあるのですが NSAttributedString と共に導入された iPad SDK 3.2 (もしくは3.2前後)で、iPhoneでは現在 iPhone SDK 4.0 ベータ .

3色を持つ文字列が欲しいのですが。

3つの別々のNSStringsを使わない理由は、それぞれの長さが NSAttributedString 部分文字列は頻繁に変更されるため、3つの別々の文字列を再配置するための計算を使用しないことを希望します。 NSString オブジェクトを作成します。

を使用して可能であれば NSAttributedString をどのように作るか - (NSAttributed文字列で不可能な場合、どのようにするか)。

編集する リメンバー @"first" , @"second"@"third" はいつでも他の文字列に置き換わる。そのため、ハードコードされたNSRangeの値を使用してもうまくいきません。

解決方法は?

属性付き文字列を構築する場合、私は物事をすっきりさせるために、mutableサブクラスを使用することを好みます。

とはいえ、3色の属性付き文字列を作るには、次のようにします。

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];

<サブ ブラウザで入力された 穴埋め実装者

もちろん、このように範囲をハードコードするつもりはないでしょう。 その代わりに、次のようなことができるかもしれません。

NSDictionary *wordToColorMapping = ....;  //an NSDictionary of NSString => UIColor pairs
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@""];
for (NSString *word in wordToColorMapping) {
  UIColor *color = [wordToColorMapping objectForKey:word];
  NSDictionary *attributes = [NSDictionary dictionaryWithObject:color forKey:NSForegroundColorAttributeName];
  NSAttributedString *subString = [[NSAttributedString alloc] initWithString:word attributes:attributes];
  [string appendAttributedString:subString];
  [subString release];
}

//display string