Как добавить токены, например NSTokenField
, в NStextView
?
NSTextView с жетонами
Ответ 1
Это на самом деле немного сложно. Вам нужно будет создать пользовательский NSTextAttachment
для каждого "токена" и вставить его в NSTextStorage
для NSTextView
.
Существует отличная статья Дэвида Синклера в Dejal Systems, в которой объясняется, как это сделать.
Ответ 2
Я понял простой подход, который использует собственный класс ячеек для токенов:
- Напишите класс ячеек, наследующий
NSTextAttachmentCell
и reimplement- (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]];
}
Этот подход более подходит для токенов, чем у Дэвид Синклер. Нет необходимости использовать обертки файлов, так как мы хотим отображать динамическое содержимое (токены), а не статические изображения.
Однако взглянуть на концепции Дэвида может быть полезно. Он изображает хороший подход к реализации перетаскивания или. функции копирования пасты.