1

次のような文字列があります。

NSString *a = @"* This is a text String \n * Followed by another text String \n * Followed by a third"

3行で印刷する必要があります。ここで、その中のアステリックス ポイントを太字にしたいと思いました。だから私は試しました:

NSMutableAttributedString *att = [[NSMutableAttributedString alloc] initWithString:a];
[att addAddtribute:NSFontAttributeName value:SOMEBOLDFONT range:[a rangeOfString:@"*"]];

ただし、これは 2 番目と 3 番目のアスタリスクのみを太字にします。それらをすべて太字にするにはどうすればよいですか?

4

3 に答える 3

1

rangeOfString すべての範囲ではなく、1 つの範囲のみを返します。ループしてすべての範囲を設定する

NSRange range = [event1 rangeOfString:@"*"];

while (range.length > 0)
{
    [att addAddtribute:NSFontAttributeName value:SOMEBOLDFONT range:[a rangeOfString:@"*"]];
     //check for the presence of * in the rest of the string
    range = [[event1 substringFromIndex:(range.location + range.length)] rangeOfString:@"*"];
}
于 2014-05-19T21:20:30.117 に答える
1

他の人が述べたように、文字列をループして複数の範囲を返す必要があります。これはうまくいきます:

NSString *a = @"* This is a text String \n* Followed by another text String \n* Followed by a third";
NSMutableAttributedString *att = [[NSMutableAttributedString alloc] initWithString:a];
NSRange foundRange = [a rangeOfString:@"*"];

while (foundRange.location != NSNotFound)
{
    [att addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:20.0f] range:foundRange];

    NSRange rangeToSearch;
    rangeToSearch.location = foundRange.location + foundRange.length;
    rangeToSearch.length = a.length - rangeToSearch.location;
    foundRange = [a rangeOfString:@"*" options:0 range:rangeToSearch];
}

[[self textView] setAttributedText:att];
于 2014-05-19T21:43:25.063 に答える