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

安德鲁

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

// 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在最新的Combine框架中使用。但是,无论我尝试谷歌搜索什么,都会带我到RxSwift相关主题,而不是实际的Combine实现。

马特

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

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

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。但是,让我们首先正确掌握基本原理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅在text_field不为空时如何启用按钮

来自分类Dev

输入字段不为空时如何启用按钮

来自分类Dev

仅在所有字段都不为空时启用提交按钮-键入>文件,然后选择并输入

来自分类Dev

如果输入不为空,则启用禁用按钮

来自分类Dev

仅在同级不为空时显示按钮

来自分类Dev

我希望模态仅在输入不为空时显示

来自分类Dev

输入不为空时显示按钮 | 不工作 JS

来自分类Dev

仅当两个textview在Android中都不为空时才启用按钮

来自分类Dev

4个单元格不为空时启用命令按钮

来自分类Dev

具有输入验证的WPF命令绑定-仅在所有输入均有效时如何启用“保存”按钮

来自分类Dev

除非输入字段不为空,否则禁用 AlertDialog 上的保存按钮

来自分类Dev

当表单中的特定输入字段不为空时如何更改单选按钮选择

来自分类Dev

当“输入”不为空时,关闭窗口

来自分类Dev

该按钮仅在标签不为零时可用

来自分类Dev

spray-cache:仅在不为空时进行缓存

来自分类Dev

如何仅在不为空时在SPAN上添加填充

来自分类Dev

Hive 仅在表不为空时截断表

来自分类Dev

Laravel Mail :: 仅在不为空时附加文件

来自分类Dev

Laravel Mail :: 仅在不为空时附加文件

来自分类Dev

如何使按钮仅在输入焦点时出现

来自分类Dev

有更新时启用保存按钮

来自分类Dev

输入值不为空时,标签标签应位于顶部

来自分类Dev

输入不为空时,jQuery不添加类

来自分类Dev

禁用div,仅在选择单选按钮选项时启用

来自分类Dev

在输入字段中输入文本时启用按钮

来自分类Dev

一旦所有EditText字段都不为空,则启用按钮

来自分类Dev

Rails:仅在创建时或在字段不为空时更新时验证

来自分类Dev

验证输入字段不为空

来自分类Dev

保存模型值不为空

Related 相关文章

  1. 1

    仅在text_field不为空时如何启用按钮

  2. 2

    输入字段不为空时如何启用按钮

  3. 3

    仅在所有字段都不为空时启用提交按钮-键入>文件,然后选择并输入

  4. 4

    如果输入不为空,则启用禁用按钮

  5. 5

    仅在同级不为空时显示按钮

  6. 6

    我希望模态仅在输入不为空时显示

  7. 7

    输入不为空时显示按钮 | 不工作 JS

  8. 8

    仅当两个textview在Android中都不为空时才启用按钮

  9. 9

    4个单元格不为空时启用命令按钮

  10. 10

    具有输入验证的WPF命令绑定-仅在所有输入均有效时如何启用“保存”按钮

  11. 11

    除非输入字段不为空,否则禁用 AlertDialog 上的保存按钮

  12. 12

    当表单中的特定输入字段不为空时如何更改单选按钮选择

  13. 13

    当“输入”不为空时,关闭窗口

  14. 14

    该按钮仅在标签不为零时可用

  15. 15

    spray-cache:仅在不为空时进行缓存

  16. 16

    如何仅在不为空时在SPAN上添加填充

  17. 17

    Hive 仅在表不为空时截断表

  18. 18

    Laravel Mail :: 仅在不为空时附加文件

  19. 19

    Laravel Mail :: 仅在不为空时附加文件

  20. 20

    如何使按钮仅在输入焦点时出现

  21. 21

    有更新时启用保存按钮

  22. 22

    输入值不为空时,标签标签应位于顶部

  23. 23

    输入不为空时,jQuery不添加类

  24. 24

    禁用div,仅在选择单选按钮选项时启用

  25. 25

    在输入字段中输入文本时启用按钮

  26. 26

    一旦所有EditText字段都不为空,则启用按钮

  27. 27

    Rails:仅在创建时或在字段不为空时更新时验证

  28. 28

    验证输入字段不为空

  29. 29

    保存模型值不为空

热门标签

归档