假设我有一个NSTextView
(或iOS上的UITextView
),我希望用户能够插入水平分隔符规则,如HTML <hr>
标记或这个东西:
Apple的文档非常重要。到目前为止,我有两个想法:
NSTextAttachment
,并让布局管理器以某种方式绘制它。这两种方法对我来说都显得有点不对劲或不优雅,因为:
NSTextView
固有的性能调整,因为无论用户在哪里滚动,所有文本视图都需要加载并准备好显示。此外,多文本视图方法会阻止用户选择整个文本,这是我的应用程序中的一项要求。有更好的想法吗?
我记得多年前尝试这样做。使用NSTextAttachment是适合我的方法。我将this conversation和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>
标签一样嵌入文本本身。