如何在UITextView上粘贴来自粘贴板的图像?

Sta*_*wer 3 ios ios-extensions

我在键盘扩展上有以下代码

let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;
Run Code Online (Sandbox Code Playgroud)

这不适UITextView用于我的容器应用程序,粘贴上下文菜单永远不会显示.它适用于其他应用程序,如"消息",但不适用于我的.

如果我尝试使用string属性粘贴文本而不是图像,我的代码可以工作,所以我非常接近.

我可能需要设置不同的文本视图,但我不知道如何.我已将"文本"从"普通"更改为"已归属",但仍无法正常工作.

Aar*_*ger 7

UITextView仅支持粘贴开箱即用的文本.您可以对其进行子类化并添加对粘贴图像的支持,这可以使用属性字符串文本附件来实现.

NSHipster的写作UIMenuControllerStack Overflow问题解释了粘贴逻辑.


Fra*_*jak 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
}
Run Code Online (Sandbox Code Playgroud)


Nik*_* M. 5

NSTextAttachment使用 TextAttachment 从图像和属性字符串创建一个。然后设置UITextView. 子类 UITextView 并覆盖该paste(_:)方法:

override func paste(_ sender: Any?) {
    let textAttachment = NSTextAttachment()
    textAttachment.image = UIPasteboard.general.image
    attributedText = NSAttributedString(attachment: textAttachment)
}
Run Code Online (Sandbox Code Playgroud)