如何拦截粘贴到NSTextView中以删除不支持的格式?



我试图为简单的所见即所得编辑创建一个简单的基于nstextview的窗口。但是,我只想允许某些类型的格式(例如,粗体,斜体,下划线和单一标题类型,但没有颜色或不同的字体)

问题是,如果我只是使用NSTextView,别人可以在另一个程序中创建或复制格式化的文本,然后简单地将其粘贴到那个视图中,所有的格式化都随之而来,允许我不允许的事情,比如不同的字体,颜色等。

最好的情况是,我希望自动删除应用程序不支持的任何格式。在最坏的情况下,我只想拦截粘贴并将其更改为纯文本,尽管他们必须手动重新格式化它。但这比无效的格式要好。

注意:类似的问题在SO上被问过很多次,但他们通常指的是web或使用JavaScript/JQuery。我特别指的是在Mac应用中使用NSTextView,所以请在简单地将这个标记为副本之前,确保那是另一个问题所指的。谢谢你。

在你的NSTextView子类中:

  override func paste(_ sender: Any?) {
     pasteAsPlainText(sender)
  }

[编辑:参见Joshua Nozzi的评论!])

一个可能的解决方案是让你的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处理Pasteboard的这些方法:

  • preferredPasteboardTypeFromArray:restrictedToTypesFromArray:
  • readSelectionFromPasteboard:
  • readSelectionFromPasteboard:type:
  • readablePasteboardTypes
  • writablePasteboardTypes
  • writeSelectionToPasteboard:type:
  • writeSelectionToPasteboard:types:
  • validRequestorForSendType:returnType:

相关内容

  • 没有找到相关文章

最新更新