我试图为简单的所见即所得编辑创建一个简单的基于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: