如何将粘贴板中的图像粘贴到 UITextView 上?
How to paste image from pasteboard on UITextView?
我在键盘扩展上有以下代码
let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;
这不适用于 UITextView
我的容器应用程序,粘贴上下文菜单从不显示。它适用于 "messages" 等其他应用程序,但不适用于我的应用程序。
如果我尝试使用 string
属性 粘贴文本而不是图像,我的代码就可以工作,所以我很接近。
我可能需要设置不同的文本视图,但我不知道如何设置。我已将 "Text" 从 "Plain" 更改为 "Attributed",但仍然无法正常工作。
从图像和带有 TextAttachment 的属性字符串创建 NSTextAttachment
。然后设置UITextView
的attributedText属性。继承 UITextView 并覆盖 paste(_:)
方法:
override func paste(_ sender: Any?) {
let textAttachment = NSTextAttachment()
textAttachment.image = UIPasteboard.general.image
attributedText = NSAttributedString(attachment: textAttachment)
}
UITextView
仅支持粘贴开箱即用的文本。您可以将其子类化并添加对粘贴图像的支持,这可以使用 attributed string text attachments.
实现
NSHipster's writeup on UIMenuController
and this Stack Overflow question解释粘贴逻辑。
如果在 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
}
我在键盘扩展上有以下代码
let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;
这不适用于 UITextView
我的容器应用程序,粘贴上下文菜单从不显示。它适用于 "messages" 等其他应用程序,但不适用于我的应用程序。
如果我尝试使用 string
属性 粘贴文本而不是图像,我的代码就可以工作,所以我很接近。
我可能需要设置不同的文本视图,但我不知道如何设置。我已将 "Text" 从 "Plain" 更改为 "Attributed",但仍然无法正常工作。
从图像和带有 TextAttachment 的属性字符串创建 NSTextAttachment
。然后设置UITextView
的attributedText属性。继承 UITextView 并覆盖 paste(_:)
方法:
override func paste(_ sender: Any?) {
let textAttachment = NSTextAttachment()
textAttachment.image = UIPasteboard.general.image
attributedText = NSAttributedString(attachment: textAttachment)
}
UITextView
仅支持粘贴开箱即用的文本。您可以将其子类化并添加对粘贴图像的支持,这可以使用 attributed string text attachments.
NSHipster's writeup on UIMenuController
and this Stack Overflow question解释粘贴逻辑。
如果在 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
}