带令牌的NSTextView

时间:2009-09-21 20:07:11

标签: objective-c cocoa nstextview

如何将NSTokenField等令牌添加到NStextView

2 个答案:

答案 0 :(得分:10)

这实际上有点复杂。您需要为每个“令牌”创建一个自定义NSTextAttachment,并将其插入NSTextStorage的{​​{1}}。

great post by David Sinclair at Dejal Systems解释了如何操作。

答案 1 :(得分:4)

我想出了一个简单的方法,它使用自定义单元格类来标记:

  1. 编写一个继承NSTextAttachmentCell并重新实施的- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView的单元格类。这将是代表NSTextView中令牌的类。
  2. 要插入令牌,请按以下步骤操作:
    1. 创建NSTextAttachment
    2. 的实例
    3. 将附件的单元格设置为令牌单元类的实例。
    4. 使用该附件创建属性字符串。
    5. 将属性字符串插入文本视图。
  3. 将标记插入文本视图的方法可能如下所示:

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

    此方法比David Sinclair更适合令牌。没有必要使用文件包装器,因为我们想要显示动态内容(令牌)而不是静态图像。
    看看David的概念可能会有用。他描述了一种实现拖放操作的好方法。复制粘贴功能。