2012-10-03 3 views
17

W serii ujęć układam zestaw etykiet z różnymi opcjami formatowania.Zmienić tekst przypisanego UILabel bez utraty formatowania?

Potem zrobić:

label.text = @"Set programmatically"; 

A wszystko formatowanie jest stracone! Działa to dobrze w iOS5.

Musi istnieć sposób na zaktualizowanie łańcucha tekstowego bez przekodowywania całego formatowania ?!

label.attributedText.string 

jest tylko do odczytu.

Z góry dziękuję.

Odpowiedz

3

Plik attributedString zawiera wszystkie dane formatowania. Etykieta w ogóle nie wie nic o formatach.

Można ewentualnie przechowywać atrybuty jako oddzielny słowniku, a następnie po zmianie attributedString można użyć:

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

Jedynym rozwiązaniem jest powrót ponownie zbudować atrybuty.

28

Można wyodrębnić atrybuty jak słownik z:

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

Następnie dodać je z powrotem z nowym tekstem:

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

Zakłada etykieta zawiera tekst w nim, inaczej będziesz krach więc powinieneś wykonać test na które najpierw:

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

Właściwie iOS powinien zrobić to domyślnie, w każdym razie mamy naszą drogę. Dzięki, Twoja sugestia pomogła mi. –

4

Pomimo, iż nowy na iOS programowo ing, napotkałem ten sam problem bardzo szybko. W iOS, moje doświadczenie jest to, że problemem

  1. Lewis42 za występuje konsekwentnie sugestię
  2. Josefa wydobycia i ponownego ubiegania atrybuty nie nie działa: atrybuty null słownika jest zwracana.

Po rozejrzał S/O, natknąłem This Post a następnie to zalecenie, skończyło się za pomocą tego:

- (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;