我想知道Venmo如何将自定义表情符号放入文本字段中。
当您复制这些图像并将其粘贴到其他位置时,它们会显示为“:sunset:”,“:concert:”等。
所以我的猜测是textField委托检查匹配该模式的任何文本(即“:concert:”)并用一个小图像替换它。
所以我想知道你如何将自己的小UIImageView放在textField中与其他文本一起。
编辑:现在我也可以考虑使用UITextView
答案 0 :(得分:2)
屏幕截图中的文本输入几乎肯定是UITextView
的自定义子类,在这里,我将提供一种方法来实现所需的结果。
这是一个简短的演示,将包含自定义图片的文字从一个UITextView
复制到另一个:
首先,我们需要将NSTextAttachment
子类化为手边的图像的文本表示,我们以后会在复制时使用。
class TextAttachment: NSTextAttachment {
var representation: String?
}
现在,当我们创建包含图片的属性字符串时,我们会将所需的图片文字表示添加到附件中:
let attachment = TextAttachment()
attachment.image = UIImage(named: "1f197")
attachment.representation = ":anything-here:"
接下来,我们将UITextView
作为子类,并覆盖copy(_:)
中UITextView
实现的class TextView: UITextView {
override func copy(_ sender: Any?) {
let selectedString = self.attributedText.attributedSubstring(from: self.selectedRange)
let enumeratableRange = NSRange(location: 0, length: selectedString.length)
let result = NSMutableAttributedString(attributedString: selectedString)
selectedString.enumerateAttribute(NSAttachmentAttributeName, in: enumeratableRange, options: []) { (value, range, _) in
if let attachment = value as? TextAttachment, let representation = attachment.representation {
result.replaceCharacters(in: range, with: representation)
}
}
UIPasteboard.general.string = result.string
}
}
方法。
cut(_:)
我们也可以覆盖其他一些方法,例如paste(_:)
和var textView: TextView // Create an instance however.
let mutableString = NSMutableAttributedString()
mutableString.append(NSAttributedString(string: "Text with "))
mutableString.append(NSAttributedString(attachment: attachment))
mutableString.append(NSAttributedString(string: " text attachment."))
self.textView.attributedText = mutableString
,但这些方法不在问题范围内。
最后,让我们将一些属性文本添加到自定义文本视图的实例中,以了解它在实际操作中的执行情况:
<Button ... WidthRequest="150" HeightRequest="200"... />
显然,当用户输入时,将文本/表情符号/其他内容转换为附件会更直观。