键入每个字符后,SwiftUI TextField将重新渲染视图。仅在按下Return键后,如何使其重新呈现视图?

时间:2019-08-01 13:14:05

标签: textfield swiftui

Xcode beta 5中存在相同的问题。示例代码来说明下面列出的问题           :

struct ContentView: View {

    @State var someText = "Change me!"
    @State var someNumber = 123.0

    var body: some View {
        Form {
            // The entire View is re-rendered after each character is typed
            TextField("Text", text: $someText,
                onEditingChanged: { edit in
                    print("onEditingChanged executed!")
                },
                onCommit: {
                    print("onCommit executed!")
                }
            )

            // When you enter a Double value, the View is not re-rendered until you hit Return
            TextField("Number", value: $someNumber, formatter: NumberFormatter())
            Spacer()

            Text("text: \(self.someText), number: \(self.someNumber)")
         }
     }
}

1 个答案:

答案 0 :(得分:0)

SwiftUI View会在每次@ObservedObjects更改时或@State更改时重新创建。

您正在将View的{​​{1}}与@State进行双向绑定。每次输入值更改时,TextField都会更新此双向绑定的值。这将更新TextField中的@State,因此将重新创建View


我认为您无需避免重新创建View以获得所需的效果。重新创建View是SwiftUI的基础。

您可以添加其他View属性,也许是@State,您可以将其更新为presentedText内部的someText的值。

例如(仅更改为“文本”):

onEditingChanged