假设我有一个NSTextView
(或iOS上的UITextView
),并且我希望用户能够插入水平分隔符规则,例如HTML <hr>
标签或以下内容:
Apple的文档非常重要。到目前为止,我有两个想法:
为每个规则插入NSTextAttachment
,并让布局管理器以某种方式绘制它。
使用多个禁用滚动的文本视图,而不是单个文本视图,将它们放在堆栈视图中,在它们之间添加分隔符视图,然后将堆栈视图放在滚动视图中。
这两种方法对我来说似乎都是错误或不雅的,因为:
在文档中,听起来好像文本附件最初是用于附加文件的。水平尺不是文件。
如果我使用多个文本视图,则可能会丢失NSTextView
固有的一些性能调整,因为所有文本视图都需要加载并准备显示,无论用户在何处滚动。另外,多文本视图方法将阻止用户选择整个文本,这是我的应用程序中的要求。
还有更好的主意吗?
答案 0 :(得分:1)
我记得几年前尝试这样做。使用NSTextAttachment是对我有用的方法。我在Mike this conversation上加了书签,以帮助我记住该怎么做。我没有代码了,但是很简单。我将NSTextAttachmentCell
细分为NSTextAttachmentCellProtocol
。覆盖cellFrame(for textContainer: NSTextContainer, proposedLineFragment lineFrag: NSRect, glyphPosition position: NSPoint, characterIndex charIndex: Int)
可以访问它的容器,该容器可以提供其宽度,并且它的行片段可以使文本在分隔符上方的y位置(以及所需的任何填充)。然后只需覆盖draw(withFrame cellFrame: NSRect, in controlView: NSView?)
方法并绘制分隔线即可。
对于有效载荷NSData,您可以执行任何操作。也许您包括线的宽度,填充,颜色等?使用NSTextAttachment的好处是它像<hr>
标记一样嵌入文本本身。