Я разобрался с простым подходом, который использует собственный класс ячеек для токенов:
- Напишите класс ячейки, который наследует
NSTextAttachmentCell
и переопределите
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
Это будет класс, который представляет токены в вашем NSTextView
.
- Чтобы вставить токен, выполните следующие действия:
- Создать экземпляр
NSTextAttachment
- Установите ячейку вложения для экземпляра класса вашей ячейки токена.
- Создать атрибутивную строку с этим вложением.
- Вставить атрибутивную строку в текстовое представление.
Метод, который вставляет токен в текстовое представление, может выглядеть так:
- (void)insertAttachmentCell:(NSTextAttachmentCell *)cell toTextView:(NSTextView *)textView
{
NSTextAttachment *attachment = [NSTextAttachment new];
[attachment setAttachmentCell:cell];
[textView insertText:[NSAttributedString attributedStringWithAttachment:attachment]];
}
Этот подход больше подходит для токенов, чем Дэвид Синклер . Нет необходимости использовать упаковщики файлов, так как мы хотим отображать динамическое содержимое (токены), а не статические изображения.
Хотя может быть полезно взглянуть на концепции Дэвида. Он изображает хороший подход для реализации перетаскивания, соотв. Функции копирования и вставки.