SwiftUI macOS currencyFormatter 不更新绑定变量

Posted

技术标签:

【中文标题】SwiftUI macOS currencyFormatter 不更新绑定变量【英文标题】:SwiftUI macOS currencyFormatter does not update binding variable 【发布时间】:2020-02-26 11:49:22 【问题描述】:

我有一个包含一个文本字段的 ActionSheet。由于此 Textfield 具有 formatter() 属性,因此它不会每小时更新一次绑定变量。如果我按下“确定”按钮,每小时的值仍然为 0。如果有另一个文本字段并且我单击它然后按下“确定”按钮,每小时的值是正确的。但我在这张表中只有一个文本字段。

有没有办法让绑定变量的值保持更新?

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()
    

【问题讨论】:

但我正在开发一个 macOS 应用程序 【参考方案1】:

以下应该可以工作(使用 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()
    

【讨论】:

以上是关于SwiftUI macOS currencyFormatter 不更新绑定变量的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI MacOs 选项卡

SwiftUI TextField (MacOS) 的奇怪行为

macOS 上的 Swiftui 表单标签对齐

(SwiftUI, MacOS 11.0) 如何在 SecureTextFeild 中检测焦点?

SwiftUI:WKWebView 在 macOS 上截断页面内容(NSViewRepresentable)

如何检测何时点击 TextField? (MacOS 上的 SwiftUI)