[英]Swift - NSMutableAttributedString changes all text in UITextView
[英]Bold part of the text in UITextView in Swift using 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中,有些人使用了这种技术,但据我所知,没有任何问题。 有什么我想念的吗? 我读错了吗?
提前致谢。
原因之一可能是您使用的字体不存在或在代码中未正确命名。 这是一个巧妙的技巧,可以显示所有可用字体的列表:
//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
}
注意:此代码包含项目特定的类和变量,但是我确定您可以提取所需的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.