2013-03-24 2 views
15

У меня есть один вид, единственным элементом интерфейса которого является UITextView. В viewDidLoad: я создаю приписываемую строку «Text \ п» и установить приписываемый текст Вида текста как таковые:NSAttributedString ' 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]; 

Может ли кто-нибудь пролить свет на то, что происходит? Кажется, я ничего не могу найти в документации или нет.

ответ

5

Вы можете использовать это:

NSAttributedString *cr = [[NSAttributedString alloc] initWithString: @"\n"]; 

Так что если у вас есть два NSAttributedString (string1 и string2), вы можете сделать:

[string1 appendAttributedString: cr]; 
[string1 appendAttributedString: string2]; 

Это ужасно и не элегантно .... но оно работает!!!

+0

'NSAttributedString' не может использовать' appendAttributedString', потому что его нельзя изменить. Правильно ли это использовать 'NSMutableAttributedString'? – Penguin

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:…]; 

Для прошивки, вы можете проверить this page, в которых они дают вам замену.

Наши методы initWithHTML направлены на то, чтобы идеально соответствовать выводам версии Mac. Этого можно достичь для персонажей, и у меня есть модульных тестов, которые делают это идеальным. Что касается атрибутов, то есть много вещей, которые нужно сделать. немного отличается от iOS, чтобы добиться такого же внешнего вида. Я не буду беспокоить вас с деталями.

+1

Метод «initWithHTML:» недоступен в iOS. – rmaddy

+0

Справа. Я отредактировал сообщение, чтобы предоставить замену. – Jean

+0

На этом этапе меня больше интересует понимание того, почему я не получаю ожидаемое поведение, но я буду иметь это в виду, если мне придется обходить его. – winsome