2012-10-03 1 views
17

Im Storyboard layout ich eine Reihe von Etiketten mit verschiedenen Formatierungsoptionen.Ändern Sie den Text eines attributierten UILabel ohne die Formatierung zu verlieren?

Dann mache ich:

label.text = @"Set programmatically"; 

Und alle Formatierungen verloren! Dies funktioniert in iOS5 gut.

Es muss eine Möglichkeit geben, nur die Textzeichenfolge zu aktualisieren, ohne die gesamte Formatierung neu zu codieren ?!

label.attributedText.string 

ist schreibgeschützt.

Vielen Dank im Voraus.

Antwort

3

Ein attributedString enthält alle seine Formatierungsdaten. Das Label weiß überhaupt nichts über die Formate.

Sie könnten möglicherweise die Attribute als separates Wörterbuch speichern und dann, wenn Sie das attributedString ändern können Sie:

[[NSAttributedString alloc] initWithString:@"" attributes:attributes range:range]; 

Die einzige andere Möglichkeit ist es, die Attribute wieder nach oben zu bauen.

28

Sie können die Attribute als Wörterbuch-Extrakt mit:

NSDictionary *attributes = [(NSAttributedString *)label.attributedText attributesAtIndex:0 effectiveRange:NULL]; 

Dann sie mit dem neuen Text hinzufügen zurück:

label.attributedText = [[NSAttributedString alloc] initWithString:@"Some text" attributes:attributes]; 

Dies setzt voraus, der Beschriftungstext in ihm, sonst werden Sie Absturz, so sollten Sie wahrscheinlich zuerst eine Überprüfung mit dem:

if ([self.label.attributedText length]) {...} 
+0

Eigentlich iOS es standardmäßig tun sollten, trotzdem haben wir uns auf den Weg. Danke, Ihr Vorschlag hat mir geholfen. –

4

Obwohl neu in iOS-Programm Ich stieß sehr schnell auf das gleiche Problem. In iOS, ist meine Erfahrung, dass

  1. Lewis42 das Problem
  2. Josefs tritt konsequent Vorschlag zu extrahieren und das erneute Anwenden der Attribute nicht nicht funktioniert: ein Null-Attribute Wörterbuch zurückgegeben.

umsah Nachdem s/o, stieß ich auf This Post und folgte dieser Empfehlung, ich dies am Ende mit:

- (NSMutableAttributedString *)SetLabelAttributes:(NSString *)input col:(UIColor *)col size:(Size)size { 

NSMutableAttributedString *labelAttributes = [[NSMutableAttributedString alloc] initWithString:input]; 

UIFont *font=[UIFont fontWithName:@"Helvetica Neue" size:size]; 

NSMutableParagraphStyle* style = [NSMutableParagraphStyle new]; 
style.alignment = NSTextAlignmentCenter; 

[labelAttributes addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, labelAttributes.length)]; 
[labelAttributes addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, labelAttributes.length)]; 
[labelAttributes addAttribute:NSForegroundColorAttributeName value:col range:NSMakeRange(0, labelAttributes.length)]; 

return labelAttributes;