ios - 在 `UITextView` 中组合文本和图像

标签 ios swift

在开始之前,让我承认存在类似的问题,有些有答案,有些没有。但是,它们没有解决我的具体问题。如果你知道任何,请告诉我。

现在,当我将图像添加到 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/

相关文章:

objective-c - X代码 4.3 : Static Library Generation

ios - Swift 4 中的 statusBarStyle

swift - 使 if 语句的变量成为全局变量

ios - 将相同的 View Controller 插入堆栈会产生奇怪的行为

ios - Json Values Append Array 但 ViewDidLoad 看起来是空的

objective-c - 如何使用 scheduleLocalNotification 设置 applicationIconBadgeNumber?

iphone - 如何在iOS中将base64编码的文档转换为多页UIImageView?

ios - 使用 Firebase 数据 Swift、Xcode 7 填充 UITableViewController

iphone - UILabel > 显示文本(记录已保存)一秒钟然后清除 UILabel 不起作用

ios - 如何确定各种字符串中是否包含 2 个或更多单词