在UILabel中添加UITextField(填空)。

3
我正在尝试在Objective C中实现类似iOS的以下效果。 enter image description here 填空(UITextField)应为内联,并且应该能够拥有自己的inputType。
此外,每个视图都是UITableViewCellcell.contentView类型。
我的当前方法是找到字符串的长度并计算包装内容长度到下一行。 计算UITextFieldxy,并在UTextField之后添加另一个UILabel 除此之外还有其他方法吗?

目前我正在尝试使用Glyphs、TextView容器和NSLayoutManagers,但是进展不大。有人可以帮忙吗? - Dheeraj Jami
我认为UIStackView在这种情况下(适用于iOS9)非常适合。我认为可以将多个标签和文本视图容器添加到水平堆栈中。当宽度达到最大长度时,将它们移动到垂直的UIStackView以换行显示。您还可以保留一个数组来引用这些文本视图。注意:这只是一个想法,尚未经过验证的概念。 - Francis Yeap
3个回答

3
作为EmilioPelaez所说,这并不完全是对您问题的回答,而是一个建议:
您可以为每个“序列”(即UILabel-UItextfield等)使用带有水平流的集合视图。
该集合视图有两种类型的单元格:
1. 具有设置为“1”的行数的uilabel和适合单元格的正确布局。 2. 具有uitextfield和正确布局的另一个单元格。
结合:
我的当前方法是找到字符串的长度并计算换行内容的长度到下一行。
您可以轻松调整不同单元格的宽度,隐藏uitextfield(如果需要),并显示更动态的“序列”(如果需要)。

1
这并不是对你问题的确切回答,而是一个不同交互方式的建议。 我认为,你可以使用带有属性字符串的UILabel,而不是使用内联文本字段,并在文本字段所在的位置添加一个具有不同颜色的不同字符,可供点击(例如,此字符✚)。
当被点击时,您可以显示一个带有文本输入的覆盖层,一旦完成该输入,您就可以使用该文本更新标签(仍然可点击,并且具有不同的颜色)。
我认为这个答案也可能相关:iOS中在UITextView中检测属性文本上的轻击

所以我们只是将操作添加到attributedStringCharacters中,并为文本输入添加了一个覆盖层? - Dheeraj Jami
在iOS 9中,检测带属性文本的轻拍对于多个带属性文本不起作用。 - Dheeraj Jami

0

我认为在 iOS9 以下版本中,将 UILabel 分离并计算它们所需的位置是一个不错的解决方案,但如果你可以依赖 iOS,UIStackView 可以极大地简化这个过程。你可以在这个教程中了解更多相关信息: UIStackView 教程

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接