如何设置NSTextView的段落属性宽度

时间:2019-02-20 17:45:06

标签: cocoa nstextview nsparagraphstyle

我的英语太糟糕了,我也不知道如何形容。

请查看我首先上传的图片。这是尤利西斯的截图。

enter image description here

这应该是一个NSTextView控件。选择所有文本后,我发现它可以控制特定段落的左侧偏移。

我试图模仿它。

但是我发现NSMutable段落样式似乎没有实现这种效果,它只能实现与下图类似的效果。

enter image description here

简而言之,我想实现上一张图片的效果,但只想获得第二张图片的效果。

我看了另一个问题,但主要是关于背景色,我想知道缩进的问题,以便获得更多的结果。

NSTextView selection highlights all characters even paragraph indents

尤利西斯如何实施?

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖fillBackgroundRectArray(_: count:forCharacterRange:color:)子类中的NSLayoutManager来修改选择的图形矩形。

class MyLayoutManager: NSLayoutManager {

    override func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor) {
        // selection rects to draw a highlight.
        var rects: [NSRect] = Array(UnsafeBufferPointer(start: rectArray, count: rectCount))

        // modify rects here...

        // call super and pass in your custom rects array.
        super.fillBackgroundRectArray(&rects, count: rectCount, forCharacterRange: charRange, color: color)
    }

}

您可以实现以下目标:

enter image description here


顺便说一句,您可以使用以下方法替换文本视图的布局管理器:

textView.textContainer?.replaceLayoutManager(MyLayoutManager())