12

如何将令牌(如NSTokenField)添加到 a NStextView

4

2 回答 2

11

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

Dejal Systems 的 David Sinclair有一篇很棒的文章解释了如何做到这一点。

于 2009-09-21T22:07:32.790 回答
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的方法更适合令牌。不需要使用文件包装器,因为我们想要显示动态内容(令牌)而不是静态图像。
不过,看看大卫的概念可能会很有用。他描述了实现拖放响应的好方法。复制粘贴功能。

于 2013-03-10T09:32:51.607 回答