NSAttributedString '\n' игнорируется
У меня есть один вид, единственным элементом интерфейса которого является UITextView
. В viewDidLoad:
я создаю строку с атрибутом "Текст\n" и устанавливаю текст, связанный с текстом как таковой:
NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Text\n"];
[self.textView setAttributedText:string];
Моя проблема в том, что разрыв строки игнорируется при запуске приложения.
Если я использую NSString
и setText:
, которые не выполняются.
NSString *string = [[NSString alloc] initWithString:@"Text\n"];
[self.textView setText:string];
Может ли кто-нибудь пролить свет на то, что происходит? Кажется, я ничего не могу найти в документации или нет.
Ответы
Ответ 1
Вы можете использовать это:
NSAttributedString *cr = [[NSAttributedString alloc] initWithString: @"\n"];
Итак, если у вас есть две NSAttributedString (строка1 и строка2), вы можете сделать:
[string1 appendAttributedString: cr];
[string1 appendAttributedString: string2];
Это ужасно и не изящно.... но он работает!!!
Ответ 2
Я бы посоветовал вам использовать:
[[NSAttributedString alloc] initWithHTML:[@"Text<BR />" dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:NULL];
Я использую это все время, и он отлично работает. Я даже сделал макрос из него:
#define html2AttributedString(htmlString) \
[[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding] \
documentAttributes:NULL] autorelease]
И затем вы можете сделать макрос для цвета, выравнивания, шрифта и т.д.
Короче говоря, вам просто нужно заменить все "\n"
в вашей строке на <BR />
и использовать приведенный выше код. Для запасной части используйте:
[yourString stringByReplacingOccurrencesOfString:... withString:…];
Для iOS вы можете проверить эту страницу, в которой они дают вам замену.
Наши методы initWithHTML направлены на то, чтобы идеально соответствовать Версия для Mac. Этого можно достичь для персонажей, и у меня есть единичные тесты, которые делают это совершенным. Что касается атрибутов, есть много вещей, которые нужно сделать немного отличается от iOS, чтобы добиться такого же взгляда. Я не буду тебя беспокоить с деталями.