gpt4 book ai didi

ios - 带有 @tags 的 UITextView 和视觉效果背后的隐藏信息

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:03 24 4
gpt4 key购买 nike

我正在尝试实现与 Facebook 的帖子编辑器相同的功能,您可以在其中 @tag 人。我能够使用 NSMutableAttributedString 和 NSRegularExpression 轻松实现着色。

用户发布文本后,我需要发送更多信息。用户可以从自动提示弹出窗口中选择人(已经实现,获取用户的姓名和数据)。只要我想保留@people 格式,一切都正常,但我做不到。我遇到的问题是我想向用户显示@someone,但我需要在后台保留更多信息,例如此人的 userId 以便稍后将其传递给后端。

看看 Facebook 是怎么做到的——他们甚至不使用 @ 符号,他们只是为名字添加一些背景颜色。

例如:

Here I tag @myfriend and something else

这应该会导致信息@tag 从 10 开始,长度为 9,userId=100,所以我可以给它上色并传递给后端关于用户选择了谁的信息。我还想拥有的一些附加功能是当用户从标签中删除一个字母时删除整个标签。

我有点纠结于什么是最好的方法。

想法 1:保留 2 个 NSString,一个具有标记格式的链接,其中包含存在于后台的所有数据,第二个经过修饰以显示给用户。

问题:在用户编辑时管理 2 个 NSString 真的很痛苦,所有的 NSRanges 对他们来说都是不同的,例如从文本中删除标签会很困难。我试图让两者保持同步,但遇到了很多问题并放弃了。

想法 2: 当用户选择带有偏移量、长度的人到@tag 时,保留对标签的引用的 NSArray,并显示用户生成的 NSFormattedString,它来自于没有任何特殊标记的源文本的组合,这信息。

问题:当用户编辑文本时,范围可能会改变,例如,如果用户在我的例子中删除或添加一些字母到我的@myfriend 之前,我将不得不更新所有标签的偏移量,这可能会导致一些问题。如果用户选择一个文本范围并将其删除,则更复杂的情况是,偏移量必须更新超过 1。

这两个听起来都过于复杂,我知道问题并不容易,但也许有人对此类功能有一些经验,或者对如何以某种合理的方式解决它有一些想法。

最佳答案

我的问题的答案是第 2 个想法。

我在 UITextField 中保留了一个文本 + 单独的所有标签及其位置和长度的数组 - 这是来自自动完成 View 。

期间

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

我更新所有在将要更改的范围之后的标签,方法是将它们的位置增加 [text length] - range.length

我还有一些改进,当用户从标签中删除单个字母时,它会完全消失。在此功能中完成的所有工作都非常顺利。

根据那些生成的标记位置,我装饰了一个文本。

关于ios - 带有 @tags 的 UITextView 和视觉效果背后的隐藏信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26537912/

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