9

単純なWYSIWYG編集用の単純なNSTextViewベースのウィンドウを作成しようとしています。ただし、特定の種類の書式設定のみを許可したい(たとえば、太字、斜体、下線、単一の見出しの種類は許可しますが、色や異なるフォントは許可しません)。

問題は、単にNSTextViewを使用する場合、誰かが別のプログラムでフォーマットされたテキストを作成またはコピーし、それをそのビューに貼り付けるだけで、そのすべてのフォーマットがそれに伴い、異なるフォント、色、等

せいぜい、アプリケーションがサポートしていないフォーマットを自動的に削除したいのです。最悪の場合、貼り付けをインターセプトしてプレーンテキストに変更したいのですが、手動で再フォーマットする必要があります。ただし、これは無効なフォーマットよりも望ましい方法です。

注:SOで何度も似たような質問がありましたが、通常はWebを参照しているか、JavaScript/JQueryを使用しています。私は特にMacアプリでNSTextViewを使用することについて言及しているので、これを重複としてマークする前に、他の質問がそれを参照していることを確認してください。ありがとうございました。

4

2 に答える 2

4

NSTextView サブクラスで:

  override func paste(_ sender: Any?) {
     pasteAsPlainText(sender)
  }
于 2016-09-26T18:45:14.003 に答える
3

[編集: Joshua Nozzi のコメントを参照してください!]

考えられる解決策の 1 つは、NSTextView にこのテンプレート メソッドを実装させることです。

- (void)paste:(id)sender {
    NSPasteboard *pb = [NSPasteboard generalPasteboard];
    //receive formatted string from pasteboard
    //remove formatting from string
    //put back plaintext string into pasteboard
    [super paste:sender];
    //put back initial formatted string
}

この方法では、実際の挿入/貼り付けを処理する必要はありませんが、実際の貼り付けの前にペーストボードをいじることができます。

NSTextViewまた、ペーストボードを処理する次の方法を検討することもできます。

  • preferredPasteboardTypeFromArray:restrictedToTypesFromArray:
  • readSelectionFromPasteboard:
  • readSelectionFromPasteboard:type:
  • readablePasteboardTypes
  • writablePasteboardTypes
  • writeSelectionToPasteboard:type:
  • writeSelectionToPasteboard:types:
  • validRequestorForSendType:returnType:
于 2011-11-20T01:35:03.720 に答える