Как вызвать значение ValueTransformed после того, как reverseValueTransformed изменил ограниченное свойство?(Swift) - PullRequest
1 голос
/ 02 июня 2019

У меня есть 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, если это возможно

требуемая последовательность:

  1. Введено новое значение в текстовое поле
  2. textField обновляет ограниченное свойство ViewController, используя заданное значение ValueTransformer.reverseValueTransformed
  3. Недавно измененное ограниченное свойство ViewController обновляет текстовое поле, используя ValueTransformer.valueTransformed

Обходной путь для аналогичного случая: As @Джеймс Буканек и @Willeke предложили, использовать NumberFormatter действительно легко и удобно.Я успешно выполнил то, что пытался сделать с этим.Это не ответ на мой вопрос, но он добился цели.Спасибо, ребята.

...