我正在尝试使用属性字符串来自定义标签,但在 swift 中遇到了奇怪的错误。
func redBlackSubstring(substring: String) {
self.font = UIFont(name: "HelveticaNeue", size: 12.0)
var theRange: Range<String.Index>! = self.text?.rangeOfString(substring)
var attributedString = NSMutableAttributedString(string: self.text!)
let attribute = [NSForegroundColorAttributeName as NSString: UIColor.blackColor()]
attributedString.setAttributes(attribute, range: self.text?.rangeOfString(substring))
self.attributedText = attributedString
}
我也试过使用下面的代码
func redBlackSubstring(substring: String) {
self.font = UIFont(name: "HelveticaNeue", size: 12.0)
var theRange: Range<String.Index>! = self.text?.rangeOfString(substring)
var attributedString = NSMutableAttributedString(string: self.text!)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: self.text?.rangeOfString(substring))
self.attributedText = attributedString
}
在这两种情况下,都会出现奇怪的错误“无法使用类型为‘([NSString : ...”的参数列表调用‘setAttributes’”
我已经尝试了堆栈溢出和许多其他教程中可用的大多数解决方案,但是所有这些都会导致此类错误。
最佳答案
罪魁祸首是Range。使用 NSRange 而不是范围。这里需要注意的另一件事是,简单地将 self.text 转换为 NSString 会给你强制解包的错误。
因此,请改用“self.text!as NSString”。
func redBlackSubstring(substring: String) {
self.font = UIFont(name: "HelveticaNeue", size: 12.0)!
var range: NSRange = (self.text! as NSString).rangeOfString(substring)
var attributedString = NSMutableAttributedString(string: self.text)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blackColor(), range: range)
self.attributedText = attributedString
}
关于ios - NSAttributedstring 不能快速工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594167/