我可以设置`UILabel`的`attributedText`属性

Sha*_*din 45 objective-c nsattributedstring ios

我可以设置对象的attributedText属性UILabel吗?我尝试了下面的代码:

UILabel *label = [[UILabel alloc] init];
label.attributedText = @"asdf";
Run Code Online (Sandbox Code Playgroud)

但它给出了这个错误:

在'UILabel*'类型的对象上找不到属性"attributedText"

#import <CoreText/CoreText.h> 不工作

Mic*_*ler 199

以下是如何在标签上使用属性文本的完整示例:

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;
}
Run Code Online (Sandbox Code Playgroud)


Cha*_*pta 32

不幸的是,UILabel不支持属性字符串.您可以改用OHAttributedLabel.

更新:自iOS6以来,UILabel确实支持属性字符串.有关详细信息,请参阅下面的UILabel参考或Michael Kessler的答案.

  • 从iOS 6开始,UILabel通过attributedText属性支持属性字符串. (38认同)

小智 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;
Run Code Online (Sandbox Code Playgroud)


Tan*_*yem 6

对于 Swift 4:

iOS 11 和 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
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 5

对于使用swift的人来说,这是一个单行:

myLabel.attributedText = NSMutableAttributedString(string: myLabel.text!, attributes: [NSFontAttributeName:UIFont(name: "YourFont", size: 12), NSForegroundColorAttributeName: UIColor.whiteColor()])
Run Code Online (Sandbox Code Playgroud)