2013-03-24 15 views
15

Ich habe eine einzige Ansicht, deren einziges UI-Element eine UITextView ist. In viewDidLoad: erstelle ich eine zugeschrieben Zeichenfolge mit „Text \ n“ und legen Sie die zugeschrieben Text Text-Ansicht als solche:NSAttributedString ' n' ignoriert

NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Text\n"]; 
[self.textView setAttributedText:string]; 

Mein Problem ist, dass der Zeilenumbruch wird ignoriert, wenn ich die app laufen.

Wenn ich eine NSString und setText: verwenden, passiert das nicht.

NSString *string = [[NSString alloc] initWithString:@"Text\n"]; 
[self.textView setText:string]; 

Kann jemand etwas Licht auf, was geschieht? Ich kann nichts in der Dokumentation oder sonst etwas finden.

Antwort

5

Sie können diese verwenden:

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

Also, wenn Sie zwei NSAttributedString haben (string1 und string2) Sie tun können:

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

Es ist schrecklich und nicht elegant .... aber Es klappt!!!

+0

'NSAttributedString' kann' appendAttributedString' nicht verwenden, da es nicht geändert werden kann. Ist es richtig, 'NSMutableAttributedString' zu verwenden? – Penguin

2

Ich würde Ihnen raten, zu verwenden:

[[NSAttributedString alloc] initWithHTML:[@"Text<BR />" dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:NULL]; 

Ich benutze diese die ganze Zeit und es funktioniert perfekt. Ich machte sogar ein Makro aus ihm heraus:

#define html2AttributedString(htmlString)                 \ 
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]   \ 
    documentAttributes:NULL] autorelease] 

Und dann können Sie Makro für Farbe machen, Ausrichtung, Schriftart, etc ...

Kurz gesagt, man muss nur alle "\n" in der Zeichenfolge ersetzen mit <BR /> und verwenden Sie den oben angegebenen Code. Für das Ersatzteil verwenden:

[yourString stringByReplacingOccurrencesOfString:... withString:…]; 

für iOS können Sie überprüfen this page, in dem sie Ihnen einen Ersatz.

Unsere initWithHTML-Methoden zielen darauf ab, die Ausgabe der Mac-Version perfekt aufeinander abzustimmen. Dies ist möglich, um Zeichen zu erreichen, und ich habe Unit-Tests, die sicherstellen, dass dies perfekt ist. In Bezug auf die Attribute gibt es viele Dinge, die getan werden müssen etwas anders auf iOS, um das gleiche Aussehen zu erreichen. Ich werde dich nicht stören mit den Details dort.

+1

Die Methode 'initWithHTML:' ist in iOS nicht verfügbar. – rmaddy

+0

Rechts. Ich habe den Beitrag bearbeitet, um einen Ersatz zu bieten. – Jean

+0

An diesem Punkt interessiere ich mich mehr dafür, zu verstehen, warum ich nicht das erwartete Verhalten erhalte, aber ich werde es mir merken, wenn ich am Ende damit umgehen muss. – winsome

Verwandte Themen