您可以通过覆盖 的绘图方法来覆盖颜色NSLayoutManager
。
final class LayoutManager1: NSLayoutManager {
override func fillBackgroundRectArray(rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor) {
let color1 = color == NSColor.secondarySelectedControlColor() ? NSColor.redColor() : color
color1.setFill()
super.fillBackgroundRectArray(rectArray, count: rectCount, forCharacterRange: charRange, color: color1)
color.setFill()
}
}
并替换NSTextView
它的布局管理器。
textView.textContainer!.replaceLayoutManager(layoutManager1)
这是完整的工作示例。
正如@Kyle 询问原因setFill
,我添加了一些更新。
来自苹果手册:
... charRange 和 color 参数仅用于提供信息;颜色已经设置在图形状态。如果出于任何原因修改它,则必须在从此方法返回之前恢复它。...
这意味着将其他颜色传入super
call 无效,您只需要
NSColor.setFill
使其与super
call 一起工作。此外,手册要求将其设置回原始版本。