【问题标题】:NSTextAttachment custom viewNSTextAttachment 自定义视图
【发布时间】:2014-07-14 16:27:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios objective-c cocoa-touch textkit nstextattachment


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      从 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多