2012-06-27 133 views
7

我想有像数字表达式编辑文本字段文本字段:令牌文本字段

enter image description here

这非常类似于NSTokenField,但NSTokenField只支持分隔符分隔的列表的令牌,如Mail.app中的“To:”字段。

enter image description here

我必须将这些令牌嵌入在特定位置的文本,但在其他方面有他们的工作完全一样NSTokenField(退格键删除标记,你可以拖动周围等)。

是否有任何第一方或第三方控制可以做到这一点?我没有找到任何东西。

如果不是,你会如何推荐实施它?使用核心文本并重新发明方向盘(实现NSTextField以更好的令牌支持)?还是有更好的解决方案?

回答

5

我不认为有一个替代控制可用NSTokenField(好吧,几个星期前我都找不到)。

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

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