Как подключить NSPopUpButton с выбором единиц измерения к способу представления NSTextField?

В сущности Core Data у меня есть атрибут "length". Я сохраняю длину в сантиметрах.

Я хочу дать пользователю возможность просматривать и редактировать длину в сантиметрах или дюймах. Поэтому я помещаю NSTextField рядом с кнопкой NSPopUpButton с выбором см и дюймов.

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

Я видел, что есть

  • NSNumberFormatters и
  • NSValueTransformers

или я мог бы написать собственный код для преобразования единиц?

Какой самый элегантный способ решить эту проблему?

1 ответ

Решение

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

Если атрибут displayInInches- или как вы его называете - зарегистрирован как keyPath, который влияет на значение длины, преобразователь пользовательского значения будет вызван при переключении всплывающего окна, а текстовое поле обновится.

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

Кроме того, вы можете добавить средство форматирования чисел, особенно если ваш преобразователь значений преобразуется в NSNumber, а не NSString, но в основном для локализации и количества значащих цифр, а не для cm/in математики.

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