如何在uiLabel中同时包含粗体和非粗体文本?

我宁愿不用UIWebView..我也读过这个可能使用NSAttributedString但我不知道如何使用它。什么好主意吗?

苹果在他们的几个应用程序中实现了这一点; 例子截图:

谢谢! ——Dom


当前回答

AttributeString构造函数,把马克字符串,这样做可能意味着你的属性字符串没有其他属性,因此,如果您使用的是xib,你可以没有大胆的文本,将所有你想要的其他属性,然后通过属性在代码中列举范围你记下的字符串,并将它们应用于带属性字符串从你xib文件,然后重新申请你认为AttributeString特定领域。

其他回答

检查TTTAttributedLabel。它是UILabel的一个替换,它允许你在一个标签中混合字体和颜色,通过设置NSAttributedString作为标签的文本。

在这种情况下,你可以尝试,

UILabel *displayLabel = [[UILabel alloc] initWithFrame:/*label frame*/];
displayLabel.font = [UIFont boldSystemFontOfSize:/*bold font size*/];

NSMutableAttributedString *notifyingStr = [[NSMutableAttributedString alloc] initWithString:@"Updated: 2012/10/14 21:59 PM"];
[notifyingStr beginEditing];
[notifyingStr addAttribute:NSFontAttributeName
                     value:[UIFont systemFontOfSize:/*normal font size*/]
                     range:NSMakeRange(8,10)/*range of normal string, e.g. 2012/10/14*/];
[notifyingStr endEditing];

displayLabel.attributedText = notifyingStr; // or [displayLabel setAttributedText: notifyingStr];
NSString *needToChangeStr=@"BOOK";
NSString *display_string=[NSString stringWithFormat:@"This is %@",book];

NSMutableAttributedString *attri_str=[[NSMutableAttributedString alloc]initWithString:display_string];

int begin=[display_string length]-[needToChangeStr length];
int end=[needToChangeStr length];


[attri_str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30] range:NSMakeRange(begin, end)];

AttributeString构造函数,把马克字符串,这样做可能意味着你的属性字符串没有其他属性,因此,如果您使用的是xib,你可以没有大胆的文本,将所有你想要的其他属性,然后通过属性在代码中列举范围你记下的字符串,并将它们应用于带属性字符串从你xib文件,然后重新申请你认为AttributeString特定领域。

提供要处理的字符串作为输入,并提供粗体/彩色的单词作为输入。

func attributedString(parentString:String, arrayOfStringToProcess:[String], color:UIColor) -> NSAttributedString
{
    let parentAttributedString = NSMutableAttributedString(string:parentString, attributes:nil)
    let parentStringWords = parentAttributedString.string.components(separatedBy: " ")
    if parentStringWords.count != 0
    {
        let wordSearchArray = arrayOfStringToProcess.filter { inputArrayIndex in
            parentStringWords.contains(where: { $0 == inputArrayIndex }
            )}
        for eachWord in wordSearchArray
        {
            parentString.enumerateSubstrings(in: parentString.startIndex..<parentString.endIndex, options: .byWords)
            {
                (substring, substringRange, _, _) in
                if substring == eachWord
                {
                    parentAttributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 15), range: NSRange(substringRange, in: parentString))
                    parentAttributedString.addAttribute(.foregroundColor, value: color, range: NSRange(substringRange, in: parentString))
                }
            }
        }
    }
    return parentAttributedString
}