在开始之前,让我承认存在类似的问题,有些有答案,有些没有。但是,它们没有解决我的具体问题。如果你知道任何,请告诉我。
现在,当我将图像添加到 UITextView
时,我将图像放在光标所在的位置。我通过每次附加 5 个空格来为图像腾出空间来实现这一点。当光标到达 UItextView
的末尾时,它会停留在那里而不会自动移动到下一行,除非我键入一个键。即使我附加空格,它仍然留在那里,所以我的图像就堆在那里。我决定添加一个换行符 "\n"
以手动将其移至下一行。
现在我有两个问题。首先,即使我有这样的情况,也只有角落显示的部分图像:
if ((cursorPosition.x + 30) >= message.frame.width) {
message.text = message.text.stringByAppendingString("\n");
}
else {
message.text = message.text.stringByAppendingString(" ");
}
我该如何解决这个问题,使其不会超出框架范围?
其次,因为我手动添加新行,当我删除文本时,光标移动到某个任意位置,这对我来说很奇怪。例如,我可以删除第 4 行的文本,但它只会跳转到第 2 行。
非常感谢任何有关如何解决其中一个或两个问题的建议。下面是 UITextView
的样子:
已编辑:我正在编辑此内容以帮助可能遇到类似问题的任何人。我想创建一个应用程序,用户可以在其中添加文本和图像,就像我们在 WhatsApp
中所做的那样。在向我建议以下解决方案之前,我一直在努力做到这一点。它很好用。希望对某人有所帮助。
最佳答案
如果我了解您的目标,以及您目前如何实现目标。您应该检查是否需要先返回。
if ((cursorPosition.x + 30) >= message.frame.width) {
message.text = message.text.stringByAppendingString("\n");
}
然后你应该得到当前的光标位置,并在那里添加你的 UIImageView。
let size = CGSize(width: 30, height: 30);
let img = UIImage(named: change_arr[indexPath.row]);
let addImg = UIImageView(image: UIImage(named: change_arr[indexPath.row]));
addImg.frame = CGRect(origin: newCursorPosition, size: size);
message.addSubview(addImg);
那么如果您需要添加空格,请立即添加。
如前面的评论所述,使用 NSTextAttachment 将简化所有这些,并使您不必创建 UIView 等...
它看起来像这样,您不需要检查光标位置,因为它会像处理文本一样处理它。
//create your UIImage
let image = UIImage(named: change_arr[indexPath.row]);
//create and NSTextAttachment and add your image to it.
let attachment = NSTextAttachment()
attachment.image = image
//put your NSTextAttachment into and attributedString
let attString = NSAttributedString(attachment: attachment)
//add this attributed string to the current position.
textView.textStorage.insertAttributedString(attString, atIndex: textView.selectedRange.location)
现在图像是内联的,并且像文本一样处理。如果用户在上面退格,它会像文本一样删除。
关于ios - 在 `UITextView` 中组合文本和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28424045/