问题 带令牌的NSTextView


我该如何添加令牌,比如 NSTokenField,到 NStextView


8577
2017-09-21 20:07


起源



答案:


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

有一个 Dejal Systems的David Sinclair的精彩帖子 这解释了如何做到这一点。


8
2017-09-21 22:07



谢啦。我不知道从哪里开始寻找它。这是一个很好的开始。 - gcstr
哇,文章是在2007年一直写的......它是否适用于TextView的新版iOS 7 TextKit实现? - fatuhoku
这篇文章是为MacOS编写的。 iOS上的最新动态是什么? - fatuhoku


答案:


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

有一个 Dejal Systems的David Sinclair的精彩帖子 这解释了如何做到这一点。


8
2017-09-21 22:07



谢啦。我不知道从哪里开始寻找它。这是一个很好的开始。 - gcstr
哇,文章是在2007年一直写的......它是否适用于TextView的新版iOS 7 TextKit实现? - fatuhoku
这篇文章是为MacOS编写的。 iOS上的最新动态是什么? - fatuhoku


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

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

这种方法比标记更适合于令牌 大卫辛克莱。因为我们想要显示动态内容(令牌)而不是静态图像,所以不需要使用文件包装器。
看看大卫的概念可能会有用。他描述了一种实现拖放操作的好方法。复制粘贴功能。


4
2018-03-10 09:32



在没有NSTextAttachmentCell类的iOS上怎么样? - fatuhoku