SwiftUI macOS currencyFormatter не обновляет переменную привязки - PullRequest
1 голос
/ 26 февраля 2020

У меня есть ActionSheet с одним текстовым полем. Поскольку это текстовое поле имеет атрибут formatter (), оно не обновляет переменную привязки ежечасно. Если я нажимаю кнопку OK, значение часа по-прежнему равно 0. Если есть еще одно текстовое поле, и я нажимаю на него, а затем нажимаю кнопку OK, значение часа еженедельно. Но у меня есть только одно текстовое поле в этом листе.

Есть ли способ сохранить значение переменной привязки обновленным?

struct AddClientSheet: View {
    @EnvironmentObject var store: Store
    @Environment(\.presentationMode) var presentationMode
    @State private var hourly = 0.0

    var body: some View {
        Form {
            Section(header: Text(“Kunde hinzufügen”).font(.title)) {
                TextField(“Stundenrate”, value: $hourly, formatter: currencyFormatter())
            }
            Divider()
            HStack {
                Spacer()
                Button(action: cancel) {
                    Text("Abbrechen")
                }
                Button(action: addClient) {
                    Text("Hinzufügen")
                }
            }
        }
    }

    func currencyFormatter() -> NumberFormatter {
        let f = NumberFormatter()
        f.numberStyle = .currency
        return f
    }

    func addClient() {
        if hourly > 0{
            //store the data
            self.presentationMode.wrappedValue.dismiss()
        }
    }

    func cancel() {
        self.presentationMode.wrappedValue.dismiss()
    }
}

1 Ответ

0 голосов
/ 28 февраля 2020

Должно работать следующее (протестировано с Xcode 11.2 / macOS 10.15.3)

func addClient() {
    NSApp.keyWindow?.makeFirstResponder(nil) // finish text edit
    if hourly > 0 {
        //store the data
        print(">> hourly = \(hourly)")
        self.presentationMode.wrappedValue.dismiss()
    }
}
...