¿Cambiar el text de un UILabel atribuido sin perder el formatting?

En el guión gráfico, layout un set de tags con varias opciones de formatting.

Entonces lo hago:

label.text = @"Set programmatically"; 

¡Y todo el formatting se pierde! Esto funciona bien en iOS5.

Debe haber una manera de actualizar la secuencia de text sin recodificar todo el formatting?

 label.attributedText.string 

es solo lectura

Gracias por adelantado.

Un atributedString contiene todos sus datos de formatting. La label no sabe nada sobre los formattings en absoluto.

Es posible que pueda almacenar los attributes como un dictionary independiente y luego, cuando cambie el atributedString, puede usar:

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

La única otra opción es volver a crear los attributes.

Puede extraer los attributes como un dictionary con:

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

Luego, agrégalos nuevamente con el nuevo text:

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

Esto supone que la label tiene text en él, de lo contrario se bloqueará, por lo que probablemente deberías realizar una comprobación de eso primero con:

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

Aunque era nuevo en la progtwigción de iOS, me encontré con el mismo problema muy rápidamente. En iOS, mi experiencia es que

  1. El problema de Lewis42 ocurre constantemente
  2. La sugerencia de josef de extraer y volver a aplicar los attributes no funciona: se devuelve un dictionary de attributes nulos.

Después de mirar alnetworkingedor de s / o, encontré este post y seguí esa recomendación, terminé usando esto:

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