У меня есть NSSlider и NSTextField, которые оба связаны со свойством (давайте назовем его var X:CGFloat
) класса ViewController.Я использую ValueTransformer, чтобы преобразовать число с плавающей точкой в строку со знаком «%» (например, 5,0 -> «5,0%»). Я также реализовал обратное, которое будет принимать строку (с суффиксом или без) и анализировать ее в CGFloat (например, "5%" -> 5.0 или "5" -> 5)
Поэтому, когда ползунок перемещается, он обновляет X до значения ползунка, а затем соответственно обновляется textField.Моя проблема, когда я вставляю значение через текстовое поле.Он обновляет X и ползунок, но я хотел бы, чтобы он вызывал valueTransformed, чтобы в текстовом поле отображалась отформатированная строка «% .1f \%» (например, если я вставил «56» и нажал клавишу «Ввод», он переформатировал бы его так:"56.0%")
Другими словами, я хочу вручную указать textField обновить его строковое значение после обновления значения ограниченного свойства.
Я искал вариант привязки, ноЯ не мог найти никакой подсказки.Кроме того, я пытался вручную вызвать didChangedValue: ForKey всякий раз, когда newValue отличается от currentValue X без успеха
tldr: я хочу, чтобы textField переформатировал введенный мной текст (если он действителен) в "%.1f \% "форма (например," 56 "->" 56.0% ") через ValueConverter, если это возможно
требуемая последовательность:
- Введено новое значение в текстовое поле
- textField обновляет ограниченное свойство ViewController, используя заданное значение ValueTransformer.reverseValueTransformed
- Недавно измененное ограниченное свойство ViewController обновляет текстовое поле, используя ValueTransformer.valueTransformed
Обходной путь для аналогичного случая: As @Джеймс Буканек и @Willeke предложили, использовать NumberFormatter действительно легко и удобно.Я успешно выполнил то, что пытался сделать с этим.Это не ответ на мой вопрос, но он добился цели.Спасибо, ребята.