NSTextView选择突出显示所有字符,甚至段落缩进

Vit*_*nko 3 macos cocoa objective-c nstextview swift

找不到任何线索来管理它。

默认情况下,NSTextView选择突出显示其文本容器的整个大小。它忽略行距,头或尾缩进等。但是在Pages应用程序选择中不突出显示那些辅助部分,它仅突出显示字符。即使文本容器的高度较小(前后段落间距),它也会突出显示行的所有高度。

我想实现这种行为,但不知道从哪里开始。我在这里搜索过,我在搜索过Apple文档,还尝试过示例项目。没有。

也许有人可以指引我正确的方向?谢谢!

Vit*_*nko 5

我发现hamstergene的答案不正确。实际上,NSTextView会突出显示其整个范围内的文本容器行。

因此,如果您使用段落的头部缩进,则前导文本空白将突出显示。并且,如果选择EOL字符,则文本容器的尾部将突出显示。

我的解决方案是使段落样式的首尾缩进为零(我将其缓存在私有变量中,并在访问我的文本存储进行打印时将它们放回),并通过覆盖的lineFragmentRectForProposedRect:atIndex:WritingDirection调整文本容器行的框架:我的NSTextContainer子类的剩余方法。

但是后来我找到了很多正确的方法。只需重写func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor)NSLayoutManager,计算您的矩形并使用这些矩形调用super。并且,如果您正确计算了选择矩形,您将获得确切的选择行为,例如在Apple Pages或MS Word中。

简单容易!