使用NSMutableAttributedString在Swift中的UITextView中大胆部分文本

时间:2015-11-30 17:12:26

标签: ios swift uitextview nsmutableattributedstring

我正在尝试在UITextView中加粗部分文本。 这是我正在使用的代码(虽然我简化了文本):

@IBOutlet weak var textview: UITextView!

/*...*/

var str : NSMutableAttributedString = NSMutableAttributedString(string:"this is a test", attributes: [NSFontAttributeName:textview.font!] )
str.addAttribute(NSFontAttributeName, value: UIFont(name: "GillSans-Bold", size: 16)!, range: NSMakeRange(10, 4))
textview.attributedText = str

然而它不起作用,我不明白为什么......我见过的所有例子都使用了这个。没有错误,但文本中没有任何内容以粗体显示。

很抱歉,如果它是重复的,我发现很多帖子都在谈论在uitextview中以粗体显示文本,有些人使用这种技术,但据我所知,没有任何问题。我错过了什么吗?我读错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:-1)

一个原因可能是您使用的字体不存在或在代码中未正确命名。这是一个显示所有可用字体列表的巧妙技巧:

//credits to Chris: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/#includefonts
func printFontFamilyNames(){

    for family: String in UIFont.familyNames()
    {
        print("\(family)")
        for names: String in UIFont.fontNamesForFamilyName(family)
        {
            print("== \(names)")
        }
    }

}

这可能无法直接回答您的问题,但我相信您会发现它有用。并检查此代码块顶部的链接,我已从中提取此函数。

<强>更新

这是我编写的一段代码,它正确地更改了UILabel 中属性字符串的字体:

if let terms = self.terms {

        let text = NSMutableAttributedString(string: terms.text!)

        let textAsString = text.string as NSString
        let range = NSMakeRange(0, textAsString.length)

        textAsString.enumerateSubstringsInRange(range, options: NSStringEnumerationOptions.ByWords, usingBlock: { (substring, substringRange, enclosingRange, _) -> () in

            if  ["Create", "Account", "Terms", "of", "Service", "Privacy", "policy"].contains(substring!) {

                if let font = UIFont(name: "OpenSans-Semibold", size: 11) {

                    text.addAttribute(NSFontAttributeName, value: font, range: substringRange)

                } else {

                    Services.log("Invalid font")

                }

            }

            //...

        })

        terms.attributedText = text

    }

注意:此代码包含项目特定的类和变量,但我相信您可以提取所需的内容。