如何在文本视图中实现水平尺?

米沙

假设我有一个NSTextView(或UITextView在iOS上为),并且希望用户能够插入水平分隔符规则,例如HTML<hr>标记或以下内容:


实现此目的的最佳方法是什么?

Apple的文档对此很重要。到目前为止,我有两个想法:

  1. NSTextAttachment为每个规则插入一个,并使布局管理器以某种方式绘制它。

  2. 可以使用禁用了滚动的多个文本视图,而不是单个文本视图,将它们放在堆栈视图中,在它们之间添加分隔符视图,然后将堆栈视图放在滚动视图中。

这两种方法对我来说似乎有点错误或不雅,因为:

  1. 在文档中,听起来好像文本附件最初是用于附加文件的。水平尺不是文件。

  2. 如果使用多个文本视图,则可能会丢失一些固有的性能调整,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章