假设我有一个NSTextView
(或UITextView
在iOS上为),并且希望用户能够插入水平分隔符规则,例如HTML<hr>
标记或以下内容:
Apple的文档对此很重要。到目前为止,我有两个想法:
NSTextAttachment
为每个规则插入一个,并使布局管理器以某种方式绘制它。
可以使用禁用了滚动的多个文本视图,而不是单个文本视图,将它们放在堆栈视图中,在它们之间添加分隔符视图,然后将堆栈视图放在滚动视图中。
这两种方法对我来说似乎有点错误或不雅,因为:
在文档中,听起来好像文本附件最初是用于附加文件的。水平尺不是文件。
如果使用多个文本视图,则可能会丢失一些固有的性能调整,NSTextView
因为所有文本视图都需要加载并准备显示,无论用户在何处滚动。另外,多文本视图方法将阻止用户选择整个文本,这是我的应用程序中的要求。
还有更好的主意吗?
我记得几年前尝试这样做。使用NSTextAttachment是对我有用的方法。我在与Mike Ferris的对话中添加了书签,以帮助我记住该怎么做。我没有代码了,但是很简单。我将其子类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>
标签一样保持嵌入文本本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句