如何从UITextView的粘贴板上粘贴图像?
我有一个键盘extensión下面的代码
let pasteboard = UIPasteboard.generalPasteboard() var image = UIImage(named: "myimage"); pasteboard.image = image;
这不适用于我的容器应用程序上的UITextView
,粘贴上下文菜单永远不会显示。 它适用于其他应用程序,如“消息”,但不在我的。
我的代码工程,如果我尝试粘贴文字,而不是使用string
属性的图像,所以我很接近。
我可能需要设置我的文本视图不同,但我不知道如何。 我已将“文本”从“普通”更改为“已归因”,但仍然不起作用。
UITextView
仅支持粘贴文本。 您可以将其子类化,并添加对粘贴图像的支持,这可以使用属性string文本附件来实现。
UIMenuController上的UIMenuController
和这个堆栈溢出问题解释了粘贴逻辑。
如果在UITextView子类中实现,它不起作用,但我在包含textView的UIViewController中尝试了它,它的工作原理如下:
-(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
从图像和属性string创build一个NSTextAttachment。 然后设置UITextView
的属性UITextView
属性。 子类UITextView并覆盖paste(_:)
方法:
override func paste(_ sender: Any?) { let textAttachment = NSTextAttachment() textAttachment.image = UIPasteboard.general.image attributedText = NSAttributedString(attachment: textAttachment) }