2009-09-21 4 views

ответ

8

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

Существует great post by David Sinclair at Dejal Systems, в котором объясняется, как это сделать.

+0

Спасибо человеку. Я не знал, с чего начать его искать. Это отличное начало. – goo

+0

Ничего себе, статья была написана полностью в 2007 году ... Применяется ли она к новой версии TextView для TextView для IOS 7 TextView? – fatuhoku

+0

Статья написана для MacOS. Что нового в iOS? – fatuhoku

4

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

  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]]; 
} 

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

+2

Как насчет на iOS, где нет класса NSTextAttachmentCell? – fatuhoku

Смежные вопросы