使用 NSValueTransformer 的 NSComboBox 自动补全

NSComboBox autocompletion with an NSValueTransformer

我想制作一个包含预定值列表的 NSComboBox。底层对象是自定义 Swift 结构,我正在使用自定义 NSValueTransformer 将它们与我正在存储的底层字符串表示形式相互转换。

我想将用户限制在弹出窗口中的选项,但仍允许自动完成。我正在为其使用数据源,并且正在使用 Cocoa 绑定到核心数据对象,并尝试使用 KVO 核心数据验证,就像我在常规(非组合)文本中使用的一样字段,但该字段没有值转换器。

第一个问题是,如果我将行为设置为 Selectable,转换会正确发生并保存正确的值,转换后的值会传递给 KVO 验证。但是用户无法输入并获得自动完成功能。如果我设置 Editable,那么您可以键入并自动完成,但不会转换、验证或保存任何值。

我想要 KVO 验证,这样我就可以防止用户输入任意值 - 我想要自动完成,但不是自由输入。

这些是我的组合框属性和绑定检查器:

NSComboBox 旨在允许用户输入自定义值以及菜单项列表,因此它包含一个文本字段。如果你不想要这种行为,可以使用 NSPopUpButton,它只有一个项目列表。 pop-up 按钮本身没有自动完成功能,但与其他菜单一样,可以通过输入名称来选择项目。