arc*_*ist 5 cocoa-touch objective-c nstextattachment ios textkit
是否可以在NSTextAttachment要在iOS上显示的位置显示自定义视图?我有自定义文本存储和布局管理器子类,但我不知道在哪里放置代码来实际添加子视图.
(我想要的原因是支持内联方程式编辑.我有一个自定义文本字段类,允许用户键入方程式,我希望将此视图添加到另一个文本视图的主体内.)
我已经看过这个教程,虽然它似乎是一个很好的起点,但它并没有涵盖实际绘制文本附件的位置.那么,具体来说,我应该覆盖哪些方法来添加自定义视图来代替默认文本附件图标?
如果我想做什么是可能的,或者我是否以错误的方式解决这个问题,请告诉我.谢谢你的帮助!
您想要做的事情是可能的,尽管框架架构没有直接预见到。文本附件被设计为某种被动元素,它们是文本的一部分,不会暴露任何特殊或单独的交互。本质上它们只是绘制对象。但是\xe2\x80\xa6\xc2\xa0如果您知道布局过程如何工作,则可以插入自定义视图。
\n\n要使用每个相关更改更新布局,您需要覆盖此方法并在每次调用时定位视图:
\n\n- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin \nRun Code Online (Sandbox Code Playgroud)\n\n由于这会被频繁调用,因此请确保其实现足够高效。在调用此方法期间插入和删除视图以及更改相应视图的框架应该是安全的。获取字形范围的字符范围,如下所示:
\n\nNSRange charRange = [self characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL];\nRun Code Online (Sandbox Code Playgroud)\n\n接下来,迭代您的自定义存储以查找所有公式附件。对于每个附件,从布局管理器获取字形的布局边界,例如使用以下方法:
\n\n- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container\nRun Code Online (Sandbox Code Playgroud)\n\n然后将视图的框架更新为返回的矩形并从那里获取它。
\n| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |