について考えるUITextViewをすることができ、ここで私は1つの方法を紹介しますそれだけで望ましい結果を達成することができます。ここで
は1 UITextView
から別のカスタムイメージを含むテキストをコピーし、短いデモです:
まず、我々はその手の画像のテキスト表現を持つようにNSTextAttachment
をサブクラス化する必要があります後でコピーするときに使用します。
class TextAttachment: NSTextAttachment {
var representation: String?
}
我々は、画像を含む属性付きの文字列を作成するときに今、我々は添付ファイルに画像の所望のテキスト表現を追加します:
let attachment = TextAttachment()
attachment.image = UIImage(named: "1f197")
attachment.representation = ":anything-here:"
次に、我々はUITextView
をサブクラス化し、オーバーライドしますUIResponderStandardEditActions
で宣言された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
明らかに添付ファイルにテキスト/絵文字/何を変換するために、より直感的になりますユーザーが入力中にオンザフライで実行できます。
[ここ](https://stackoverflow.com/a/38016657/5442445)のように、NSAttributedStringとNSTextAttachmentを使用します。 – beyowulf
@beyowulfそれは役に立ちます - 私はUILabelとUITextViewのために働いているが、画像はUITextFieldに表示されません。私はさらに探求しますが、これは今のところうまくいきます。ありがとう! – vikzilla
@vikzilla ** UITextFieldはリッチテキストをサポートしていないので、**はおそらく 'UITextView'でしょう。 – xoudini