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

问题描述

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

iOS shortcuts app

iOS shortcuts app whilst editing

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

enter image description here

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

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

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

编辑

我想过另一种方法来实现这一点,但我也不知道它是否可行。这个想法是使用文本字段的集合视图。一些文本字段将共享相同的 LayoutManager,以便文本跨文本字段共享。我必须计算要创建多少个文本字段,以便它们沿着 collectionView 向下流动

enter image description here

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

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

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

谢谢

解决方法

这肯定不是一项微不足道的任务,我认为没有现成的解决方案。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...