我希望有一个文本字段,如Numbers中的表达式编辑器文本字段:
它与NSTokenField
非常相似,但NSTokenField
仅支持分隔符分隔的标记列表,例如Mail.app中的“收件人:”字段。
我必须将这些令牌嵌入到特定位置的文本中,否则它们的工作方式与NSTokenField
完全相同(退格会删除令牌,您可以将它们拖动等等。)
是否有任何第一方或第三方控件可以执行此类操作?我没找到任何东西。
如果没有,您会如何推荐实施?使用核心文本并重新发明轮子(使用更好的令牌支持实现NSTextField
)?或者有更好的解决方案吗?
答案 0 :(得分:6)
我认为NSTokenField
没有替代控件可用(好吧,几周前我找不到一个)。
可能的选择可能是遵循Apple示例项目LayoutManagerDemo中提供的解决方案。这显示了NSTextView
的子类,能够检测文本上的鼠标移动。安装并运行演示以获得基本想法。
该示例使用NSLayoutManager
来检测鼠标移动,但代码可能适用于检测文本中的特定字符序列,例如文本字段中的标记。从NSLocationManager
获得令牌及其位置后,您可以根据令牌的特征插入自己的代表。一种可能的解决方案是使用NSTextAttachmentCell
,它将成为文本中的字形。使用NSTextAttachmentCell
的好处是它被Cocoa的文本系统视为一个字形(您可以选择它,它遵循格式化等)。通过实施drawWithFrame:inView:
,您可以添加每个令牌的各种可见属性。