У меня есть такая строка:

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

Мне нужно распечатать его в виде трех строк. Теперь я хотел, чтобы точки Астерикса были выделены жирным шрифтом. Итак, я попробовал:

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

Но это выделяет только вторую и третью звездочку. Как мне выделить их все жирным шрифтом?

1
gran_profaci 20 Май 2014 в 01:02

3 ответа

Лучший ответ

Как уже упоминалось, вам нужно перебрать строку, чтобы вернуть несколько диапазонов. Это сработает:

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];
1
picciano 21 Май 2014 в 17:30

RangeOfString Возвращает только один диапазон, а не весь диапазон. Зациклить и установить все диапазоны

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:@"*"];
}
1
Naveen Prasad R 19 Май 2014 в 21:20

Вам нужно найти каждый раз, когда в вашей строке встречается символ "*".

И для этого вы можете использовать такую ​​процедуру, как найдено в этом связанном вопросе.

Единственное, что вам нужно удалить из кода:

[mutableAttributedString setTextColor:color range:NSMakeRange(range.location, 1)];

И замените его своим кодом:

 [mutableAttributedString addAttribute:NSFontAttributeName value:SOMEBOLDFONT range:NSMakeRange(range.location, 1)];
0
Community 23 Май 2017 в 11:45