7

我想要一个文本字段,例如 Numbers 中的表达式编辑器文本字段:

在此处输入图像描述

它与 非常相似NSTokenField,但NSTokenField仅支持分隔符分隔的标记列表,例如 Mail.app 中的“To:”字段。

在此处输入图像描述

我必须将这些标记嵌入到特定位置的文本中,否则它们的工作方式完全一样NSTokenField(退格删除一个标记,您可以将它们拖动等等)。

是否有任何第一方或第三方控件可以执行此类操作?我什么也没找到。

如果没有,你会如何建议实施它?使用 Core Text 并重新发明轮子(NSTextField使用更好的令牌支持实现)?还是有更好的解决方案?

4

1 回答 1

6

我认为没有可用的替代控件NSTokenField(好吧,几周前我也找不到)。

一个可能的选择可能是遵循 Apple 的示例项目LayoutManagerDemo中提供的解决方案。这显示了一个NSTextView能够检测鼠标在文本上移动的子类。安装并运行演示以获得基本概念。

该示例用于NSLayoutManager检测鼠标移动,但代码可能适用于检测文本中的特定字符序列,例如文本字段中的标记。从 获得令牌及其位置后NSLocationManager,您可以根据令牌的特征插入自己的表示。一个可能的解决方案是使用NSTextAttachmentCell它将成为文本中的字形。使用的好处NSTextAttachmentCell是它被 Cocoa 的文本系统视为字形(您可以选择它,它遵循格式等)。通过实现drawWithFrame:inView:,您可以添加每个令牌的各种可见属性。

于 2012-06-28T00:35:15.293 回答