字符串内的内联按钮和/或文本字段,其包装与使用 Swift 的文本相同

And*_*ris 5 uitextfield nsattributedstring ios textkit swift

这更多的是如何实现这一目标的问题,而不是具体的解决方案。我想要一个标签,允许按钮和文本字段内联并换行到下一行。一个示例是 iOS 快捷方式应用程序,您可以在其中键入文本所在的同一块,并且文本字段会沿同一行换行。它是一个文本字段,因为有一个插入符号。

iOS 快捷方式应用程序 编辑时的 iOS 快捷方式应用程序

从高层次来看,它可能看起来像这样:

在此输入图像描述

其中每个视图都遵循该线并在需要时换行到下一个视图。

我最初考虑使用带有样式链接的 NSAttributedString,该链接可以充当按钮,也可以打开文本字段进行输入。我尝试了这个并得到了一些有效的东西,但它与 iOS 快捷方式应用程序不同,其中文本字段位于文本中。我也考虑过使用 textkit,但我还没有做到这一点,因为我不确定这是正确的方法。

感谢您提供任何想法或解决方案。

编辑

我想过另一种方法来实现这一目标,但我不知道它是否有效。这个想法是使用文本字段的集合视图。某些文本字段将共享相同的 LayoutManager,以便文本在文本字段之间共享。我必须计算要创建多少个文本字段,以便它们沿着 collectionView 流动

在此输入图像描述

在图像中,Label 1由 1 个禁用编辑的文本字段组成。TextField 1由 3 个启用编辑的文本字段组成,并且这三个文本字段将共享相同的 LayoutManager。Label 2由 2 个带有共享布局管理器的文本字段组成,但禁用编辑。

使用这种方法意味着计算为每个“块”(标签或文本字段)创建多少个文本字段,并在每次内容更改时更新它。通过这种方法,我只考虑标签和文本字段,但可以在其他时间添加按钮。

我刚刚开始这样做,但意识到共享布局管理器会禁用编辑,所以我不知道这是否可以再实现。

谢谢

Phi*_*hov 1

这肯定是一项不平凡的任务,而且我认为没有现成的解决方案。

使用NSLayoutManager您可以计算文本的每一行/字符的帧,然后根据这些帧禁止触摸,并在可编辑文本下添加背景。

你必须使用UITextView,因为你需要禁止用户选择部分文本,你可以使用willChangeSelectionFromCharacterRange:toCharacterRange:委托方法来做到这一点,并且你需要shouldChangeTextIn:来禁止删除不可编辑的文本。