这是我的代码: 我正在尝试格式化我的文本NSMutableAttributedString(),但它似乎总是超出范围。
由于未捕获的异常终止应用程序' NSRangeException',原因:' NSMutableRLEArray objectAtIndex:effectiveRange ::越界'
extension ImageTableViewCell {
func formatLabel(code: SectionItem) {
print(code.statusType.title)
let stringFormatted = NSMutableAttributedString()
let range = (code.statusType.title as NSString).range(of: code.statusType.title)
print(range); stringFormatted.addAttribute(NSAttributedStringKey.foregroundColor, value: code.statusType.color, range:range)
stringFormatted.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: range)
self.titleLabel.attributedText = stringFormatted
}
}
我不知道可以修复
我试过了:
NSRange
NSMakeRange(loc: 0, mytext.count)
还有什么遗漏?
答案 0 :(得分:0)
您对该范围的问题是由于您的属性字符串为空。你从来没有给它初始文本。
变化:
let stringFormatted = NSMutableAttributedString()
为:
let stringFormatted = NSMutableAttributedString(string: code.statusType.title)
然后你的范围就可以了。当然,这是计算整个字符串范围的奇怪方法。只需:
let range = NSRange(location: 0, length: (code.statusType.title as NSString).length)
但是,当属性应该应用于整个字符串时,有一种更简单的方法来创建属性字符串:
extension ImageTableViewCell {
func formatLabel(code: SectionItem) {
let attributes = [ NSAttributedStringKey.foregroundColor: code.statusType.color, NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue ]
let stringFormatted = NSAttributedString(string: code.statusType.title, attributes: attributes)
self.titleLabel.attributedText = stringFormatted
}
}