Как я могу использовать подкласс NSFormatter с NSPopUpButton
Я хочу использовать подкласс NSFormatter для форматирования содержимого NSPopUpButton, который я использую для отображения списка вариантов.
По сути, у меня есть NSArray из MyObjects, который связан с NSPopUpButton через привязку значений содержимого, и я хочу отобразить что-то во всплывающем меню, отличное от того, которое возвращает -description. Я действительно не хочу использовать преобразователь, потому что тогда мне нужно создать совершенно новый массив и преобразовать каждый объект в строку перед добавлением его в новый массив.
Использование setFormatter: на самом NSPopUpButton через IB или код не работает, я подозреваю, потому что только элементы форматирования для отдельной ячейки применяются к элементам в списке.
Есть ли простой способ установить форматер для всех ячеек NSPopUpButton? По сути, я хочу просто установить его один раз и забыть об этом.
1 ответ
Обычно вы привязываете свою всплывающую кнопку к контроллеру массива, который содержит настраиваемые объекты модели (через привязку содержимого), и используете привязку значений содержимого, чтобы указать путь к этим объектам со строкой, которую вы хотите использовать в качестве заголовка.
Насколько я понимаю, у вас есть массив простых строк, которые вы хотите использовать в качестве источника данных, только вы хотите отобразить другую строку для заголовка, верно?
Я не уверен, почему создание преобразователя данных не сработало бы, если бы он был настроен, как описано выше, или, может быть, я что-то неправильно понимаю? У вас будет одна привязка к фактической строке и другая привязка к строке с использованием преобразователя, но оба они будут использовать один и тот же контроллер массива. Другие варианты - создание класса модели для обтекания строк и предоставления свойства заголовка или создание категории на NSString, которая возвращает заголовок для использования в качестве привязки отображаемого значения. Во всех этих случаях вы можете создать свой собственный NSFormatter в коде и использовать его для возврата правильного заголовка строки.