Когда я вставляю текст в NSTextView, как вставить только простой текст? - PullRequest
11 голосов
/ 18 августа 2011

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

Ответы [ 4 ]

9 голосов
/ 18 августа 2011

Используйте setRichText: для отключения расширенного текста.

8 голосов
/ 26 августа 2011

Определите пользовательский класс NSTextView с помощью следующего метода:

- (NSArray *)readablePasteboardTypes {
    return [NSArray arrayWithObjects:NSStringPboardType, 
            nil];
}

Примечание : Начиная с Mac OS X, новый typedef для типа картона задается как NSPasteboardTypeString вместо NSStringPBoardType:

- (NSArray *)readablePasteboardTypes {
    return [NSArray arrayWithObjects:NSPasteboardTypeString,
            nil];
}
6 голосов
/ 30 августа 2015

Переопределите этот метод в вашем NSTextView:

- (NSString *)preferredPasteboardTypeFromArray:(NSArray *)availableTypes restrictedToTypesFromArray:(NSArray *)allowedTypes {
  if ([availableTypes containsObject:NSPasteboardTypeString]) {
    return NSPasteboardTypeString;
  }

  return [super preferredPasteboardTypeFromArray:availableTypes restrictedToTypesFromArray:allowedTypes];
}

Для меня это сработало как для вставки, так и для перетаскивания.

0 голосов
/ 06 ноября 2013

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

Я просто хочу, чтобы все символы в моем текстовом поле всегда имели одинаковый шрифт , независимо от того, вставлены ли они программно, из пера,вклеил, втянул, набрал или заглянул Санта-Клаусом.Я искал переполнение стека для этой более широкой проблемы, но не нашел никаких вопросов (или ответов).

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

- (void)textViewDidChangeSelection:(NSNotification *)note {
    NSTextView* textView = [note object] ;
    [textView setFont:[self fontIWant]] ;
}

Готово.Это работает для всех крайних случаев, о которых я мог подумать, чтобы проверить.Немного странно наблюдать за изменением выбора для этого.Похоже, наблюдение строкового значения текстового объекта представления или регистрация для NSTextDidChangeNotification, было бы более логичным, но, поскольку у меня уже был настроен делегат, и поскольку вышеизложенное было проверено и получило одобрение Ника Цицмана, я пошелс этим.

...