我在键盘extensión上有以下代码
let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;
这对我的容器应用程序上的UITextView
不起作用,粘贴上下文菜单永远不会显示。它适用于其他应用程序,如“消息”,但不适用于我的。
如果我尝试使用string
属性粘贴文本而不是图像,我的代码就可以工作了,所以我非常接近。
我可能需要设置不同的文本视图,但我不知道如何。我已将“文本”从“普通”更改为“已归属”,但仍无法正常工作。
答案 0 :(得分:7)
UITextView
仅支持粘贴文本。您可以对其进行子类化并添加对粘贴图像的支持,这可以使用attributed string text attachments实现。
NSHipster's writeup on UIMenuController
和this Stack Overflow question解释了粘贴逻辑。
答案 1 :(得分:7)
如果在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
}
答案 2 :(得分:4)
使用TextAttachment从图像和属性字符串创建NSTextAttachment
。然后设置UITextView
的attributedText属性。子类UITextView并覆盖paste(_:)
方法:
override func paste(_ sender: Any?) {
let textAttachment = NSTextAttachment()
textAttachment.image = UIPasteboard.general.image
attributedText = NSAttributedString(attachment: textAttachment)
}