如何从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) }