Как я могу использовать подкласс NSFormatter с NSPopUpButton

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

По сути, у меня есть NSArray из MyObjects, который связан с NSPopUpButton через привязку значений содержимого, и я хочу отобразить что-то во всплывающем меню, отличное от того, которое возвращает -description. Я действительно не хочу использовать преобразователь, потому что тогда мне нужно создать совершенно новый массив и преобразовать каждый объект в строку перед добавлением его в новый массив.

Использование setFormatter: на самом NSPopUpButton через IB или код не работает, я подозреваю, потому что только элементы форматирования для отдельной ячейки применяются к элементам в списке.

Есть ли простой способ установить форматер для всех ячеек NSPopUpButton? По сути, я хочу просто установить его один раз и забыть об этом.

1 ответ

Решение

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

Насколько я понимаю, у вас есть массив простых строк, которые вы хотите использовать в качестве источника данных, только вы хотите отобразить другую строку для заголовка, верно?

Я не уверен, почему создание преобразователя данных не сработало бы, если бы он был настроен, как описано выше, или, может быть, я что-то неправильно понимаю? У вас будет одна привязка к фактической строке и другая привязка к строке с использованием преобразователя, но оба они будут использовать один и тот же контроллер массива. Другие варианты - создание класса модели для обтекания строк и предоставления свойства заголовка или создание категории на NSString, которая возвращает заголовок для использования в качестве привязки отображаемого значения. Во всех этих случаях вы можете создать свой собственный NSFormatter в коде и использовать его для возврата правильного заголовка строки.

Другие вопросы по тегам