gpt4 book ai didi

SwiftUI:仅当输入不为空时才启用保存按钮

转载 作者:行者123 更新时间:2023-12-03 09:30:13 25 4
gpt4 key购买 nike

我有一个带有两个文本字段和一个保存按钮的 View 。如何根据文本字段的内容更改按钮的状态(我只想在所有文本字段都不为空的情况下启用按钮)?这是我当前的代码:

// The variables associated with text fields
@State var name: String = ""
@State var type: String = ""

// I'd like to associate this variable with
// my button's disabled / enabled state,
// but the function responsible for it doesn't accept bindings
@State var canSave: Bool = false

var body: some View {
Form {
TextField("Name", text: $name)
TextField("Type", text: $type)

Button(action: {
// ...
}, label: {
Text("Save")
})
.disabled(!canSave) // no bindings allowed here; what to use indead?
}
}

我有一个想法,我应该使用 combineLatest来自最新的组合框架。但无论我尝试用谷歌搜索什么,都会将我引向与 RxSwift 相关的主题,而不是实际的 Combine 实现。

最佳答案

您似乎对 SwiftUI 的工作方式有误解。它不依赖于绑定(bind)的下坡数据流。它完全取决于状态变量。上坡流取决于绑定(bind),但是您在需要它们的地方得到了那些(除了您的代码是错误的:您已将两个文本字段绑定(bind)到相同的绑定(bind))。

因此,在这样的简单情况下,您不需要绑定(bind)或组合。你有状态变量,这就是你所需要的:

struct ContentView: View {
@State var name: String = ""
@State var type: String = ""
var body: some View {
Form {
TextField("Name", text: $name)
TextField("Type", text: $type)
Button(action: {
// ...
}, label: {
Text("Save")
}).disabled(name.isEmpty || type.isEmpty)
}
}
}

现在,如果您有许多文本字段要验证,而不仅仅是一两个,那么当然,您可以使用发布和订阅将它们组合成一个 Bool。但是,让我们先搞清楚基本原则。

关于SwiftUI:仅当输入不为空时才启用保存按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com