Se pueden establecer las attributedText propiedad de un UILabel objeto? He probado el código a continuación:

UILabel *label = [[UILabel alloc] init];
label.attributedText = @"asdf";

Pero da este error:

Propiedad «attributedText» no se encuentra en el objeto de tipo ‘UILabel *’

#import <CoreText/CoreText.h> no funciona

InformationsquelleAutor Shamsiddin | 2012-06-14

8 Comentarios

  1. 32

    por Desgracia, UILabel no admite atribuido cadenas. puede utilizar OHAttributedLabel lugar.

    Actualización: Desde iOS6, UILabel admite atribuido cadenas. Ver UILabel referencia o Michael Kessler la respuesta de abajo para más detalles.

    • Como de iOS 6, UILabel apoya atribuido cadenas a través de la attributedText de la propiedad.
  2. 199

    Aquí se muestra un ejemplo completo de cómo utilizar un atribuye en el texto de una etiqueta:

    NSString *redText = @"red text";
    NSString *greenText = @"green text";
    NSString *purpleBoldText = @"purple bold text";
    NSString *text = [NSString stringWithFormat:@"Here are %@, %@ and %@", 
    redText,  
    greenText,  
    purpleBoldText];
    //If attributed text is supported (iOS6+)
    if ([self.label respondsToSelector:@selector(setAttributedText:)]) {
    //Define general attributes for the entire text
    NSDictionary *attribs = @{
    NSForegroundColorAttributeName: self.label.textColor,
    NSFontAttributeName: self.label.font
    };
    NSMutableAttributedString *attributedText = 
    [[NSMutableAttributedString alloc] initWithString:text
    attributes:attribs];
    //Red text attributes
    UIColor *redColor = [UIColor redColor];
    NSRange redTextRange = [text rangeOfString:redText];//* Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration
    [attributedText setAttributes:@{NSForegroundColorAttributeName:redColor}
    range:redTextRange];
    //Green text attributes
    UIColor *greenColor = [UIColor greenColor];
    NSRange greenTextRange = [text rangeOfString:greenText];//* Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration
    [attributedText setAttributes:@{NSForegroundColorAttributeName:greenColor}
    range:greenTextRange];
    //Purple and bold text attributes
    UIColor *purpleColor = [UIColor purpleColor];
    UIFont *boldFont = [UIFont boldSystemFontOfSize:self.label.font.pointSize];
    NSRange purpleBoldTextRange = [text rangeOfString:purpleBoldText];//* Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration
    [attributedText setAttributes:@{NSForegroundColorAttributeName:purpleColor,
    NSFontAttributeName:boldFont}
    range:purpleBoldTextRange];
    self.label.attributedText = attributedText;
    }
    //If attributed text is NOT supported (iOS5-)
    else {
    self.label.text = text;
    }
    • Tener en cuenta el uso de rangeOfString como esto va a provocar errores si algunas partes del texto son un subconjunto de los demás. Te gustaría hacer mejor el trabajo fuera de los rangos de sí mismo, usando NSRange, y de la longitud de las cadenas de forma manual.
    • tienes toda la razón. Este código no puede ser utilizado en cualquier situación, sobre todo cuando los textos provienen de la web. Este fragmento de código solo se muestra cómo utilizar la attributedText junto con la compatibilidad hacia atrás…
    • Buena respuesta. Pero, maldita sea, es que un obtuso de la API.
    • esta es la manera de hacerlo en código y siguen apoyando a las antiguas versiones del sistema operativo donde esta funcionalidad no está disponible. Si sólo admiten iOS6+ (la mayoría de las aplicaciones de hoy en día), entonces usted puede hacerlo en el interface builder – mucho más limpio…
    • esto no funciona cuando tienes el mismo texto más de una vez y se aplican diferentes atributos .. 🙁 necesitas tener cadenas de caracteres.
    • como he mencionado en uno de los comentarios anteriores, «Este código no puede ser utilizado en cualquier situación, sobre todo cuando los textos provienen de la web. Este fragmento de código solo se muestra cómo utilizar la attributedText junto con la compatibilidad hacia atrás…»

  3. 10
    NSString *str1 = @"Hi Hello, this is plain text in red";
    NSString *cardName = @"This is bold text in blue";
    NSString *text = [NSString stringWithFormat:@"%@\n%@",str1,cardName];
    //Define general attributes for the entire text
    NSDictionary *attribs = @{
    NSForegroundColorAttributeName:[UIColor redColor],
    NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:12]
    };
    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text attributes:attribs];
    UIFont *boldFont = [UIFont fontWithName:@"Helvetica-Bold" size:14.0];
    NSRange range = [text rangeOfString:cardName];
    [attributedText setAttributes:@{NSForegroundColorAttributeName: [UIColor blueColor],
    NSFontAttributeName:boldFont} range:range];
    myLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    myLabel.attributedText = attributedText;
  4. 5

    Para las personas que utilizan swift, he aquí un one-liner:

    myLabel.attributedText = NSMutableAttributedString(string: myLabel.text!, attributes: [NSFontAttributeName:UIFont(name: "YourFont", size: 12), NSForegroundColorAttributeName: UIColor.whiteColor()])
  5. 3

    así que,aquí está el código para tener diferentes propiedades para la sub cadenas ,de una cadena.

     NSString *str[email protected]"10 people likes this";
    NSString *str2[email protected]"likes this";
    if ([str hasSuffix:str2])
    {
    NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:str];
    //for string 1 //
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,str.length-str2.length)];
    [string addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:14] range:NSMakeRange(0,str.length-str2.length)];
    //for string 2 //
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange((str.length-str2.length),str2.length)];
    [string addAttribute:NSFontAttributeName value:[UIFont italicSystemFontOfSize:12] range:NSMakeRange((str.length-str2.length),str2.length)];
    label.attributedText=string;
    }
    else
    {
    label.text =str;
    }
  6. 3

    para Swift 4:

    iOS 11 y xcode 9.4

      let str = "This is a string which will shortly be modified into AtrributedString"
    var attStr = NSMutableAttributedString.init(string: str)
    attStr.addAttribute(.font,
    value: UIFont.init(name: "AppleSDGothicNeo-Bold", size: 15) ?? "font not found",
    range: NSRange.init(location: 0, length: str.count))
    self.textLabel.attributedText = attStr
  7. 1

    Espero que esto ayude 😉

    NSMutableAttributedString* attrStr = [NSMutableAttributedString attributedStringWithString:@"asdf"];
    [attrStr setFont:[UIFont systemFontOfSize:12]];
    [attrStr setTextColor:[UIColor grayColor]];
    [attrStr setTextColor:[UIColor redColor] range:NSMakeRange(0,5)];
    lbl.attributedText = attrStr;
    • Simplemente use el código de arriba y se debe trabajar. Nada más para hacer.
    • da un error: la Propiedad «attributedText» no se encuentra en el objeto de tipo ‘UILabel *’
    • Intente importar «CoreText.marco». Y, a continuación, poner en su .h archivo #import <CoreText/CoreText.h>
    • otra vez el mismo error da: Propiedad «attributedText» no se encuentra en el objeto de tipo ‘UILabel *’
    • A continuación, intente utilizar este stackoverflow.com/questions/3786528/…
    • Que no es la forma de uso NSMutableAttributedString, por lo que el código anterior simplemente no funcione. Una similar y simple ejemplo es en esta respuesta: stackoverflow.com/a/11291275/67397

  8. 0
    UIFont *font = [UIFont boldSystemFontOfSize:12];
    NSDictionary *fontDict = [NSDictionary dictionaryWithObject: font forKey:NSFontAttributeName];
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@" v 1.2.55" attributes: fontDict];
    UIFont *fontNew = [UIFont boldSystemFontOfSize:17];
    NSDictionary *fontDictNew = [NSDictionary dictionaryWithObject: fontNew forKey:NSFontAttributeName];
    NSMutableAttributedString *attrStringNew = [[NSMutableAttributedString alloc] initWithString:@“Application attributes: fontDictNew];
    [attrStringNew appendAttributedString: attrString];
    self.vsersionLabel.attributedText = attrStringNew;

Dejar respuesta

Please enter your comment!
Please enter your name here