最后,我使用了 NSTokenField,因为 NSTokenField 为我添加了一些 UI 外观。但我认为我想出的额外技巧(如下)也可能适用于 NSTextField。抱歉,这有点令人费解。
简而言之,我所做的是生成一个 NSMutableDictionary(一个 iVar),其中键是 NSTokenField 中部分字符串的完整完成,对象是完成字符串表示的自定义对象。换句话说,当我生成自定义完成字符串并将它们放入要从 NSTokenFieldDelegate 方法返回的 NSArray 中tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
时,我同时将这些完成中的每一个和它们表示的对象填充到 NSMutableDictionary 中,并以完成作为键和对象作为价值。
当用户“标记”完成时(通过点击 Return 或 Tab ——我修改了标记字符集,这就是标记的全部内容),调用 NSTokenFieldDelegate 方法tokenField:representedObjectForEditingString:
。在那里,我可以通过使用 editingString 参数作为键从 NSMutableDictionary 获取我的对象:[dict objectForKey:editingString]
我认为在 NSTextFieldDelegate 方法中进行一些争论可能会controlTextDidChange:
使用字典技巧在 NSTextField 而不是 NSTokenField 上完成同样的事情,但为了做到这一点,我认为你必须有完整的完成在 NSTextField 中,获取它的 stringValue,然后将其用作键。就我而言,我不希望文本字段中的整个完成,因此 NSTokenField 的标记化对我来说效果更好。