首页 > 解决方案 > Swiftui 在 TextField 中输入值,然后单击按钮需要更改文本 - 不起作用

问题描述

我在 TextField 中输入值然后我单击按钮,单击后我需要更改文本并输入我的结果但我的代码不起作用,你能帮我吗

代码:

import SwiftUI

struct ContentView: View {
    @State var numeral: Double = 0.00
    @State var result: Double = 0.00

    var body: some View {
        VStack{

            TextField("Enrer numeral", value: self.$numeral, formatter:  NumberFormatter())
                .padding(20)
                .frame(width: 300, height: 100)
                .font(.largeTitle)

            Text("\(result)")
                .font(.largeTitle)
                .padding()

            Button(action: {
                self.result = self.numeral*1.2

                print(self.result)
                print("sfsdfd")
            }) {
                Image(systemName: "play.fill")
                    .font(.largeTitle)
                    .foregroundColor(.red)

            }
        }
       }
    }

标签: swiftswiftui

解决方案


似乎在value:用作输入时,SwiftUI 不会重新加载视图。

每当按下某个键时, SwiftUI 都会重新加载视图,并将text:其用作输入。

使用以下方法进行操作。

struct ContentView: View {

    @State var numeral : String = "0.00"
    @State var result: Double = 0.00

    var body: some View {

       VStack {

            TextField("Enrer numeral", text: $numeral)
                .keyboardType(.decimalPad) 
                .padding(20)
                .frame(width: 300, height: 100)
                .font(.largeTitle)

            Text("\(result)")
                .font(.largeTitle)
                .padding()

            Button(action: {

                UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
                if let val = Double(self.numeral) {
                    self.result = val * 1.2
                    print(self.numeral)
                    print(self.result)
                }
                else {
                    print("Entered value is invalid")
                }
            }) {
                Image(systemName: "play.fill")
                    .font(.largeTitle)
                    .foregroundColor(.red)
            }
        }
    }
}

推荐阅读