我想为NSTextView中的重要字符设置roundRect backgroundColor。属性是“标签”。我重写了** NSLayoutManager **的func fillBackgroundRectArray(_:count:forCharacterRange:color:)
。代码如下:
override func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor) {
var effectiveRange = NSMakeRange(0, 0)
let attributes = self.textStorage?.attributes(at: charRange.location, effectiveRange: &effectiveRange)
if attributes?.index(forKey: NSAttributedStringKey(rawValue: "tag")) != nil {
let bezierPath = NSBezierPath(roundedRect: rectArray[0], xRadius: 8, yRadius: 8)
bezierPath.fill()
} else {
super.fillBackgroundRectArray(rectArray, count: rectCount, forCharacterRange: charRange, color: color)
}
}
效果是:
但是当我编辑标签(“恐慌”到“paniddc”)“恐慌”时,效果不是我的愿望。效果是:
我想知道为什么?当我编辑标签时,我该怎么做才能完成最后一个效果?
我的项目在这里:github