gpt4 book ai didi

ios - NSAttributedString 的 enumerateAttribute 方法的 block 是否传递字符范围或字形范围?

转载 作者:行者123 更新时间:2023-12-01 18:39:17 24 4
gpt4 key购买 nike

tl;博士:如果我调用 NSAttributedString enumerateAttribute:inRange:options:usingBlock: 方法,range block 的参数传递字形范围或字符范围?

我的应用程序中有一个 TextView ,它的行为需要像 Notes.app 那样,当它不处于编辑模式时,它应该显示超链接(并且它们应该是可点击的),并且它应该在点击时进入编辑模式。 UITextView可编辑时不显示超链接,但如果它不可编辑,则它不会自行获得对点击的关注。在 iOS 11 之前,这可以通过使用 UITapGestureRecognizer 来解决。在 TextView 上触发编辑,但似乎有些东西(可能是拖放?)改变了手势识别器与 UITextView 的工作方式(rdar://33009324)。

我的新改进解决方案是自定义 UIGestureRecognizer如果它看到一个不在超链接上的点击,则会触发它,并使 TextView 上的所有其他识别器要求它在触发之前失败。这是通过处理触摸、获取它们在 TextView 中的位置、获取 character index for that point 来实现的。 , 枚举 NSLinkAttributeName在 TextView 的 textStorage ,并检查我的字符索引是否与我返回的任何超链接重叠。如果是这样,那么用户点击了一个链接,这个识别器就会失败。

但是,如果点击的字符索引确实与链接相交,我需要确保点击实际上与链接的矩形相交,因为它可能是该链接是 TextView 内容中的最后一件事,而触摸实际上是在文本的最后一行下方。我可以通过获取链接范围的矩形并检查它是否与我的接触点相交来做到这一点。我可以使用 boundingRectForGlyphRange:inTextContainer: 为此,但这引出了我的问题:链接的范围是字符范围还是字形范围?我需要通过 glyphRangeForCharacterRange:actualGlyphRange: 转换吗?第一的?

最佳答案

它返回一个字符范围。 NSAttributedString对字形一无所知。在执行布局之前无法将字符转换为字形,并且 NSAttributedString不包括布局信息。例如,NSAttributedString不知道它将被绘制到多宽的区域,没有它,您将无法知道换行符将在哪里,否则您将无法决定在哪里放置连字。

关于ios - NSAttributedString 的 enumerateAttribute 方法的 block 是否传递字符范围或字形范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com