(SwiftUI) Привязать Slider и TextField к одной и той же переменной? - PullRequest
0 голосов
/ 22 марта 2020

Мне было интересно, можно ли привязать ползунок и TextField к одной и той же переменной? Причина заключается в том, что я хочу, чтобы пользователь мог заполнить значение, сдвинув ползунок или вручную введя значение в текстовое поле.

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

Возможно ли это, и если нет, то есть ли аналогичные решения, которые могут дать аналогичный результат?

1 Ответ

0 голосов
/ 23 марта 2020

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

import SwiftUI

class Model : ObservableObject {

      @Published var value : Double = 50
}

struct ContentView: View {

      @ObservedObject var model = Model()

      var body: some View {

            let formatter = NumberFormatter()
            formatter.numberStyle = NumberFormatter.Style.decimal
            formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
            formatter.maximumFractionDigits = 0
            //formatter.minimumFractionDigits = 2

            let spellOutFormatter = NumberFormatter()
            spellOutFormatter.numberStyle = .spellOut

            return Form() {
                  Text("Number as words: \(spellOutFormatter.string(from: NSNumber(value: model.value)) ?? "Not Known")")

                  TextField("Number", value: $model.value, formatter: formatter)

                  Slider(value: $model.value, in: 0...100, step: 1).padding()
            }
      }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
...