NSTextView с токенами - PullRequest
       16

NSTextView с токенами

12 голосов
/ 22 сентября 2009

Как добавить токены, например NSTokenField, в NStextView?

Ответы [ 2 ]

10 голосов
/ 22 сентября 2009

Это на самом деле немного сложно. Вам нужно будет создать пользовательский NSTextAttachment для каждого "токена" и вставить его в NSTextStorage для вашего NSTextView.

Есть замечательный пост Дэвида Синклера в Dejal Systems , в котором объясняется, как это сделать.

4 голосов
/ 10 марта 2013

Я разобрался с простым подходом, который использует собственный класс ячеек для токенов:

  1. Напишите класс ячейки, который наследует NSTextAttachmentCell и переопределите
    - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
    Это будет класс, который представляет токены в вашем NSTextView.
  2. Чтобы вставить токен, выполните следующие действия:
    1. Создать экземпляр NSTextAttachment
    2. Установите ячейку вложения для экземпляра класса вашей ячейки токена.
    3. Создать атрибутивную строку с этим вложением.
    4. Вставить атрибутивную строку в текстовое представление.

Метод, который вставляет токен в текстовое представление, может выглядеть так:

- (void)insertAttachmentCell:(NSTextAttachmentCell *)cell toTextView:(NSTextView *)textView
{
    NSTextAttachment *attachment = [NSTextAttachment new];
    [attachment setAttachmentCell:cell];
    [textView insertText:[NSAttributedString attributedStringWithAttachment:attachment]];
}

Этот подход больше подходит для токенов, чем Дэвид Синклер . Нет необходимости использовать упаковщики файлов, так как мы хотим отображать динамическое содержимое (токены), а не статические изображения.
Хотя может быть полезно взглянуть на концепции Дэвида. Он изображает хороший подход для реализации перетаскивания, соотв. Функции копирования и вставки.

...