cocoa formatting paste nstextview reformat

cocoa - ¿Cómo se puede interceptar el pegado en un NSTextView para eliminar el formato no compatible?



formatting paste (2)

En su subclase NSTextView:

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

Intento crear una ventana simple basada en NSTextView para la edición WYSIWYG simple. Sin embargo, solo quiero permitir ciertos tipos de formato (por ejemplo, negrita, cursiva, subrayado y un solo tipo de encabezado, pero no hay colores ni fuentes diferentes).

El problema es si simplemente uso NSTextView, alguien puede crear o copiar texto formateado en otro programa, luego simplemente péguelo en esa vista y todo ese formato va con él, permitiendo cosas que no estoy permitiendo, como diferentes fuentes, colores, etc.

En el mejor de los casos, quiero eliminar automáticamente cualquier formato que mi aplicación no admita. En el peor de los casos, quiero simplemente interceptar el pegado y cambiarlo a texto sin formato, aunque tendrían que volver a formatearlo manualmente. Pero eso es preferible al formato no válido.

Nota: Algo similar se ha preguntado aquí en SO varias veces, pero generalmente se están refiriendo a la web o usando JavaScript / JQuery. Me refiero específicamente al uso de NSTextView en una aplicación de Mac así que, por favor, antes de simplemente marcar esto como un duplicado, asegúrese de que a eso se refiera la otra pregunta. Gracias.


[Editar: ¡vea el comentario de Joshua Nozzi!]

Una posible solución sería hacer que su NSTextView implemente este método de plantilla:

- (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 }

De esta forma, no tiene que manipular ninguna inserción / pegado real, pero puede meterse con el cartón antes de pegarlo.

También es posible que desee examinar estos métodos de NSTextView tratan con la NSTextView de NSTextView :

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