Cambiar el texto de un atribuye UILabel sin perder el formato?

En el guión gráfico I diseño de un conjunto de etiquetas con varias opciones de formato.

Entonces que debo hacer:

label.text = @"Set programmatically";

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

Debe haber una manera de actualizar la cadena de texto sin recodificar todo el formato?!

label.attributedText.string 

es de sólo lectura.

Gracias de antemano.

InformationsquelleAutor Lewis42 | 2012-10-03

3 Kommentare

  1. 4

    Un attributedString contiene todos sus datos de formato. La etiqueta no sabe nada acerca de los formatos en todos.

    Usted podría almacenar los atributos por separado en el diccionario y, a continuación, cuando se cambia la attributedString puede utilizar:

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

    La única otra opción es construir los atributos de nuevo.

  2. 29

    Puede extraer los atributos como un diccionario con:

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

    A continuación, agregue de nuevo con el nuevo texto:

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

    Esto supone que la etiqueta ha de texto en ella, de lo contrario te bloquee así que probablemente debería realizar una comprobación de que la primera con:

    if ([self.label.attributedText length]) {...}
    • En realidad, iOS deben hacerlo por defecto, de todas maneras, tenemos a nuestra manera. Gracias, tu sugerencia me ayudó.
  3. 4

    Aunque es nuevo para la programación en iOS, me he encontrado con el mismo problema de forma muy rápida. En iOS, mi experiencia es que

    1. Lewis42 el problema se produce de manera consistente
    2. josef sugerencia de extraer y volver a aplicar los atributos ¿
      no trabajo: null atributos diccionario es devuelto.

    Habiendo mirado alrededor de s/s, me encontré con Este Post y seguido la recomendación, terminé usando este:

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea