Как вы можете перехватить вставку в NSTextView для удаления неподдерживаемого форматирования? - PullRequest
8 голосов
/ 20 ноября 2011

Я пытаюсь создать простое окно на основе NSTextView для простого редактирования WYSIWYG. Однако я хочу разрешить только определенные типы форматирования (например, полужирный, курсив, подчеркивание и один тип заголовка, но не использовать цвета или другие шрифты).

Проблема в том, что если я просто использую NSTextView, кто-то может создать или скопировать отформатированный текст в другой программе, а затем просто вставить его в это представление, и все это форматирование идет с ним, позволяя вещи, которые я не разрешаю, такие как разные шрифты , цвета и т. д.

В лучшем случае я хочу автоматически удалить любое форматирование, которое не поддерживает мое приложение. В худшем случае я хочу просто перехватить вставку и изменить ее на обычный текст, хотя им придется затем вручную переформатировать ее. Но это предпочтительнее неправильного форматирования.

Примечание. Нечто подобное было задано здесь на SO несколько раз, но обычно они ссылаются на Интернет или используют JavaScript / JQuery. Я специально имею в виду использование NSTextView в приложении Mac, поэтому, прежде чем просто пометить это как дубликат, убедитесь, что это то, к чему относится другой вопрос. Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2016

В вашем подклассе NSTextView:

  override func paste(_ sender: Any?) {
     pasteAsPlainText(sender)
  }
3 голосов
/ 20 ноября 2011

[Редактировать: см. Комментарий Джошуа Ноцци!]

Одним из возможных решений было бы заставить ваш 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:
...