5

キーボード拡張機能に次のコードがあります

let pasteboard = UIPasteboard.generalPasteboard()
var image = UIImage(named: "myimage");
pasteboard.image = image;

これはUITextView、私のコンテナー アプリケーションでは機能しません。貼り付けのコンテキスト メニューは表示されません。「メッセージ」などの他のアプリケーションでは機能しますが、私のものでは機能しません。

stringプロパティを使用して画像の代わりにテキストを貼り付けようとすると、コードが機能するので、かなり近いです。

テキストビューを別の方法で設定する必要があるかもしれませんが、方法がわかりません。「テキスト」を「プレーン」から「属性付き」に変更しましたが、まだ機能しません。

4

3 に答える 3

9

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
}
于 2016-02-17T18:30:36.930 に答える
8

UITextViewボックスからのテキストの貼り付けのみをサポートします。それをサブクラス化し、画像の貼り付けのサポートを追加できます。これは、属性付きの文字列テキストの添付ファイルを使用して実装できます。

NSHipster の書き込みUIMenuControllerこのスタック オーバーフローの質問では、貼り付けロジックについて説明しています。

于 2015-03-20T20:23:24.333 に答える
5

NSTextAttachmentTextAttachment を使用して、画像と属性付き文字列から を作成します。次に、の attributedText プロパティを設定しますUITextView。UITextView をサブクラス化し、paste(_:)メソッドをオーバーライドします。

override func paste(_ sender: Any?) {
    let textAttachment = NSTextAttachment()
    textAttachment.image = UIPasteboard.general.image
    attributedText = NSAttributedString(attachment: textAttachment)
}
于 2015-03-20T20:21:27.840 に答える