6

NSTextAttachment是否可以在要在 iOS 上显示的位置显示自定义视图?我有自定义文本存储和布局管理器子类,但我不确定将代码放在哪里以实际添加子视图。

(我想要这个的原因是为了支持内联方程编辑。我有一个自定义文本字段类,它允许用户输入一个方程,我希望这个视图被添加到另一个文本视图的正文中。)

我看过这个教程,虽然它似乎是一个很好的起点,但它并没有涵盖实际绘制文本附件的位置。那么,具体来说,我应该重写哪些方法来添加自定义视图来代替默认的文本附件图标

请让我知道我想做的事情是否可行,或者我是否以错误的方式去做。谢谢你的帮助!

4

2 回答 2

3

您想做的事情是可能的,尽管框架架构没有直接预见到。文本附件被设计为一种被动元素,它们是文本的一部分,不暴露任何特殊或单独的交互。本质上,它们只是绘图对象。但是……如果你知道布局过程是如何工作的,你可以插入你的自定义视图。

要使用每个相关更改更新布局,您需要覆盖此方法并在每次调用时定位视图:

- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin 

由于这经常被调用,因此请确保它的实现足够高效。在调用此方法期间插入和删除视图以及更改相应视图的框架也应该是安全的。获取字形范围的字符范围,如下所示:

NSRange charRange = [self characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL];

接下来,遍历您的自定义存储以查找所有公式附件。对于这些附件中的每一个,从布局管理器中获取字形的布局边界,例如使用以下方法:

- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container

然后将视图的框架更新为返回的矩形并从那里获取。

于 2016-04-25T14:25:42.513 回答
0

从 iOS 15 开始,可以使用 Apple Framework

在 macOS 12 和 iOS 15 及更高版本中,NSTextAttachmentViewProvider 和 NSTextAttachmentLayout 提供了额外的功能,可以根据 NSTextLocation 或 NSTextRange 表示文档位置,并支持基于视图的文本附件。

https://developer.apple.com/documentation/uikit/nstextattachment

入口点是https://developer.apple.com/documentation/uikit/nstextattachment/3857586-registerviewproviderclass

于 2021-12-08T15:10:03.350 回答