gpt4 book ai didi

cocoa - 如何在 TextView 中实现水平线?

转载 作者:行者123 更新时间:2023-12-03 17:09:02 26 4
gpt4 key购买 nike

假设我有一个NSTextView (或 iOS 上的 UITextView ),我希望用户能够插入水平分隔符规则,例如 HTML <hr>标签或这个东西:

<小时/>

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

Apple 的文档对此非常了解。到目前为止,我有两个想法:

  1. 插入 NSTextAttachment对于每个规则并让布局管理器以某种方式绘制它。

  2. 不要使用单个 TextView ,而是使用禁用滚动的多个 TextView ,将它们放入堆栈 View 中,在它们之间添加分隔符 View ,然后将堆栈 View 放入 ScrollView 中。

    <

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

  1. 从文档来看,文本附件似乎首先是用于附加文件的。水平尺不是文件。

  2. 如果我使用多个 TextView ,我可能会失去 NSTextView 固有的一些性能调整。因为无论用户滚动到哪里,所有 TextView 都需要加载并准备好显示。此外,多 TextView 方法会阻止用户选择整个文本,而这是我的应用程序的要求。

还有更好的想法吗?

最佳答案

我记得几年前就尝试过这样做。使用 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> 一样嵌入在文本本身中。标签。

关于cocoa - 如何在 TextView 中实现水平线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55155134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com