首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTextAttachment自定义视图

NSTextAttachment自定义视图
EN

Stack Overflow用户
提问于 2014-05-25 23:37:21
回答 2查看 2.1K关注 0票数 7

在要在NSTextAttachment上显示iOS的地方可以显示自定义视图吗?我有自定义的文本存储和布局管理器子类,但我不确定将代码放在哪里才能真正添加子视图。

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

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

请告诉我,如果我想做什么是可能的,或者我是不是走错了路。谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

发布于 2016-04-25 14:25:42

您想要做的事情是可能的,尽管框架架构没有直接预见到。文本附件设计为被动元素的排序,这些元素是文本的一部分,不公开任何特殊或单独的交互。从本质上说,他们只是在画物体。但是…如果您知道布局过程是如何工作的,则可以插入自定义视图。

若要用每个相关更改更新布局,您将需要重写此方法并在每次调用中定位视图:

代码语言:javascript
复制
- (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(NSPoint)origin 

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

代码语言:javascript
复制
NSRange charRange = [self characterRangeForGlyphRange:glyphRange actualGlyphRange:NULL];

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

代码语言:javascript
复制
- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container

然后将视图的框架更新为返回的rect,并从中获取它。

票数 3
EN

Stack Overflow用户

发布于 2021-12-08 15:10:03

从iOS 15开始,可以使用

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23860948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档