Как вставить изображение из картона на UITextView?
У меня есть следующий код на клавиатуре extensión
let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;
Это не работает на UITextView
У меня в приложении-контейнере никогда не появляется контекстное меню вставки. Он работает на других приложениях, таких как "сообщения", но не на моем.
Мой код работает, если я пытаюсь вставить текст вместо изображения, используя string
собственность, так что я совсем рядом.
Мне может понадобиться настроить мой текстовый вид иначе, но я не знаю как. Я изменил "Текст" с "Обычный" на "Приписан", но все еще не работает.
3 ответа
UITextView
поддерживает только вставку текста из коробки. Вы можете создать его подкласс и добавить поддержку для вставки изображений, которая может быть реализована с использованием текстовых вложений с атрибутами.
Рецензия Н.С.Хипстера на UIMenuController
и этот вопрос переполнения стека объясняет логику вставки.
Это не работает, если реализовано в подклассе UITextView, но я попробовал это в UIViewController, содержащем textView, и это сработало:
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(paste:)) {
return [UIPasteboard generalPasteboard].string != nil || [UIPasteboard generalPasteboard].image != nil;
//if you want to do this for specific textView add && [yourTextView isFirstResponder] to if statement
}
return [super canPerformAction:action withSender:sender];
}
-(void)paste:(id)sender {
//do your action here
}
Создать NSTextAttachment
из изображения и приписанной строки с TextAttachment. Затем установите свойство attributeText для UITextView
, Подкласс UITextView и переопределить paste(_:)
метод:
override func paste(_ sender: Any?) {
let textAttachment = NSTextAttachment()
textAttachment.image = UIPasteboard.general.image
attributedText = NSAttributedString(attachment: textAttachment)
}