Автодополнение NSComboBox с помощью NSValueTransformer

Я хочу сделать NSComboBox со списком заранее определенных значений. Базовые объекты представляют собой пользовательскую структуру Swift, и я использую пользовательскую NSValueTransformer для преобразования их в базовое строковое представление, которое я храню, и из него.

Я хочу ограничить пользователя параметрами во всплывающем окне, но при этом разрешить автозаполнение. Я использую для этого источник данных, и я использую привязки Cocoa к объекту Core Data и пытался использовать проверку основных данных KVO, как я использую в обычном (не комбинированном) текстовом поле, но это поле не имеет преобразователя значений.

Первая проблема заключается в том, что если я установлю поведение на Selectable, преобразование произойдет правильно и правильное значение будет сохранено, а преобразованные значения будут переданы на проверку KVO. Но тогда пользователь не может ввести и получить автодополнение. Если я установлю Editable, вы сможете печатать и автозаполнять, но никакое значение не будет преобразовано, проверено или сохранено.

Я хочу, чтобы проверка KVO была на месте, чтобы я мог запретить пользователю вводить произвольные значения - я хочу автозаполнение, но не ввод в произвольной форме.

Это мои инспекторы атрибутов и привязок для поля со списком:


person Dov    schedule 18.06.2019    source источник
comment
Если вы не хотите, чтобы пользователь вводил произвольные значения, есть ли конкретная причина, по которой вы хотите использовать поле со списком?   -  person red_menace    schedule 18.06.2019
comment
@red_menace Вы знаете, я использовал NSComboBox для чего-то еще в том же окне и совершенно забыл о NSPopupButton. Если вы хотите сделать это ответом, я приму его.   -  person Dov    schedule 18.06.2019


Ответы (1)


NSComboBox позволяет пользователю вводить настраиваемые значения в дополнение к списку пунктов меню, поэтому он включает текстовое поле. Если вы не хотите такого поведения, можно использовать NSPopUpButton, который просто содержит список элементов. Всплывающая кнопка сама по себе не имеет автозаполнения, но, как и в других меню, элементы можно выбирать, вводя имя.

person red_menace    schedule 18.06.2019