簡體   English   中英

SwiftUI 文本字段狀態更改停止與 iOS 15.4.1 一起使用

[英]SwiftUI Textfield state change stopped working with iOS 15.4.1

以下代碼在 iOS 15.4.1 之前運行良好。 它只是在輸入的值大於 100000 后啟用文本字段旁邊的按鈕。它仍然適用於 15.3.1,但停止使用 15.4.1。 知道發生了什么改變以阻止它工作嗎?


    import SwiftUI
    
    struct ContentView: View {
        @State private var woid:Int? = nil
        @State var showResults = false
        private var woidFormatter:NumberFormatter = {
            let formatter = NumberFormatter()
            formatter.numberStyle = .decimal
            formatter.groupingSeparator = ""
            return formatter
        }()
        
        var body: some View {
            Form {
                Section(header: Text("Work Order Lookup")) {
                    HStack {
                        TextField("Work Order Number", value: $woid, formatter: woidFormatter)
                            .keyboardType(.numberPad)
                        Spacer()
                        
                        Button("Lookup") {
                            
                            showResults.toggle()
                        }.buttonStyle(PurpleButton(disabled: (woid ?? 0) < 100000))
                            .disabled((woid ?? 0) < 100000)
                    }
                }
            }
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    
    struct PurpleButton: ButtonStyle {
        let disabled:Bool
        let cardColor:Color = Color(#colorLiteral(red: 0.5568627715, green: 0.3529411852, blue: 0.9686274529, alpha: 1))
        
        func makeBody(configuration: Configuration) -> some View {
            configuration.label
                .padding()
                .background(disabled ? Color.gray : cardColor)
                .foregroundColor(.white)
                .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous))
        }
    }

我不確定為什么它以前有效,但使用選項的正確簽名是這個:

    @available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
    public init<F>(_ titleKey: LocalizedStringKey, value: Binding<F.FormatInput?>, format: F, prompt: Text? = nil) where F : ParseableFormatStyle, F.FormatOutput == String

更改此行:

TextField("Work Order Number", value: $vm.woid, formatter: woidFormatter)

到這個作品

TextField("Work Order Number", value: $vm.woid, format: .number)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM