我想要一个文本字段,例如 Numbers 中的表达式编辑器文本字段:
它与 NSTokenField
非常相似,但 NSTokenField
仅支持分隔符分隔的 token 列表,例如 Mail.app 中的“收件人:”字段。
我必须将这些标记嵌入到特定位置的文本中,但除此之外,它们的工作方式与 NSTokenField
完全相同(退格删除标记,您可以将它们拖来拖去等)。
是否有任何第一方或第三方控件可以执行此类操作?我什么也没找到。
如果没有,您建议如何实现?使用 Core Text 并重新发明轮子(实现具有更好 token 支持的 NSTextField
)?或者有更好的解决方案吗?
最佳答案
我认为 NSTokenField
没有可用的替代控件(好吧,几周前我也找不到)。
一个可能的选择可能是遵循 Apple 示例项目中提供的解决方案 LayoutManagerDemo .这显示了 NSTextView
的一个子类,它能够检测鼠标在文本上的移动。安装并运行演示以了解基本概念。
示例使用 NSLayoutManager
来检测鼠标移动,但是代码可能会被修改以检测文本中的特定字符序列,例如文本字段中的标记。从 NSLocationManager
获得 token 及其位置后,您可以根据 token 的特征插入自己的表示。一个可能的解决方案是使用 NSTextAttachmentCell
,它将成为文本中的一个字形。使用 NSTextAttachmentCell
的好处是它被 Cocoa 的文本系统视为一个字形(您可以选择它,它遵循格式等)。通过实现 drawWithFrame:inView:
,您可以为每个标记添加各种可见属性。
关于objective-c - 像 Numbers 中的标记文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226106/