NSTextAttachment自定义视图

7
是否有可能在iOS上显示自定义视图以替代NSTextAttachment的位置?我有自定义文本存储和布局管理器子类,但我不确定要将代码放在哪里才能添加一个子视图。
(我想要这样做的原因是为了支持内联公式编辑。我有一个自定义文本字段类,它将允许用户输入一个方程式,并且我希望这个视图被添加到另一个文本视图的正文中。)
我看过这个教程,虽然它似乎是一个很好的起点,但它并没有涵盖文本附件实际绘制的位置。所以,具体来说,我应该重写哪些方法来添加自定义视图以替代默认文本附件图标
请告诉我我想做的是否可行,或者我是否走错了路。感谢您的帮助!
2个回答

3
你想做的是可能的,虽然这不是框架架构直接预见到的。文本附件被设计为一种被动元素,它们是文本的一部分,不会展示任何特殊或单独的交互。它们本质上只是绘图对象。但是,如果你知道布局过程的工作原理,你可以插入自定义视图。
为了在每次相关更改时更新布局,你需要重写此方法并在每个调用中定位视图:
- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin 

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

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

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

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

然后更新视图的框架到返回的矩形中,然后从那里开始。

2

你之前试过使用这个API吗?如果是的话,你能详细介绍一下如何使用吗?我现在遇到了一些困难。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接