值更改时 Swiftui Textfield 不更新

2023-12-07

我在表单上有一个文本字段,用户可以在其中输入值,但我还想使用按钮更新文本字段的内容。

这是我的代码:

struct test: View {
@State private var amount: Double = 0.0

var body: some View {
    Form {
        VStack {
            HStack {
                Text("Amount EUR")
                Spacer()
                TextField("Type amount", value: $amount, format: .number)
                    .keyboardType(.numberPad)
                    .multilineTextAlignment(.trailing)
            }
            
            Text("Set MAX (999)")
                .frame(maxWidth: .infinity, alignment: .leading)
                .onTapGesture {
                    print("before tap \(amount )")
                    amount = 999
                    print("after tap \(amount)")
                }
            
        }
    }
}

当我刚刚启动应用程序时,第一次点击文本会将文本字段更新为 999,但之后它就不再起作用了。 这amount值已正确更新,但文本字段未反映更改。

你能解释一下吗?


答案很简单TextFields当它们处于焦点时不要更新。为了解决这个问题,你需要合并一个@FocusState进入视图,并导致TextField在更新变量之前失去焦点。您可以通过点击您的Text在点击之前TextField。你会看到它更新得很好。

struct ButtonUpdateTextField: View {
    @State private var amount: Double = 0.0
    @FocusState var isFocused: Bool // <-- add here
    
    var body: some View {
        Form {
            VStack {
                HStack {
                    Text("Amount EUR")
                    Spacer()
                    TextField("Type amount", value: $amount, format: .number)
                        .keyboardType(.numberPad)
                        .multilineTextAlignment(.trailing)
                        .focused($isFocused) // <-- add here
                }
                
                Text("Set MAX (999)")
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .onTapGesture {
                        print("before tap \(amount )")
                        isFocused = false // <-- add here
                        amount = 999
                        print("after tap \(amount)")
                    }
                
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

值更改时 Swiftui Textfield 不更新 的相关文章

随机推荐

  • 如何使 python 命令行程序自动完成任意内容而不是解释器

    我知道如何在 python 解释器 在 unix 上 中设置 python 对象的自动完成功能 谷歌显示了许多有关如何执行此操作的解释的点击 不幸的是 有太多的参考资料 很难找到我需要做的事情 这略有不同 我需要知道如何在用 python
  • PyQt5:类型错误:“顶级小部件的基类错误”

    我已经使用 QtDesigner 创建了 ui 文件 并将它们加载到两个单独的窗口中 如下所示 class MainWindow QMainWindow def init self parent None super init Set up
  • 用于加载 PNG 图像的替代库

    我的 java J2SE 应用程序正在从 Web 读取大量 png 图像 其中一些图像使用诸如真彩色图像的透明度颜色 tRNS 部分 之类的功能 而 Sun 的 Oracle 的 PNGImageReader 实现会简单地忽略这些功能 因此
  • Angular 将回调函数作为 @Input 传递给子组件,类似于 AngularJS 方式

    AngularJS 有 参数 您可以在其中将回调传递给指令 例如AngularJS 的回调方式 是否可以将回调作为 Input对于角度组件 如下所示 如果不是 那么与 AngularJS 最接近的是什么 Component selector
  • 如何查看哪个复选框被选中?

    如何在 PHP 中检查是否checkbox是否检查 如果选中该复选框 则将传递该复选框的值 否则 该字段不会在 HTTP post 中传递 if isset POST mycheckbox echo checked
  • 从 .NET 服务打印 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我现在正在开发一个项目 该
  • Maven项目中Tomcat部署问题

    我一直在尝试创建一个简单的基于 Maven Web 的项目 以对 Maven 充满信心 我在 pom xml 中添加了 tomcat7 插件以将其用作服务器 但是当我开始使用以下命令将 war 文件部署到 tomcat 时 tomcat7
  • ORDER BY 子句的 CASE WHEN 语句

    我正在使用 SQL Server 2008 R2 我想要对表中的记录进行基于优先级的排序 所以我在 ORDER BY 子句中使用 CASE WHEN 语句 ORDER BY 子句如下 ORDER BY CASE WHEN TblList P
  • 如何为 Java 应用程序构建 docker 容器

    我想要做的是为我的 Java 应用程序构建一个 docker 映像 但对于大多数编译语言来说 以下注意事项应该适用 problem 在我的构建服务器上 我想为我的应用程序生成一个 docker 映像作为可交付成果 为此 我必须使用一些构建工
  • 如何在unity3d上使用xcode游戏

    我有一个使用 Objective C 在 xcode 上构建的游戏 这个游戏需要与unity3d开发的另一个游戏集成作为它的一部分 我怎样才能做到这一点 有什么插件可以实现这个目的 问题是 我有一个unity3d游戏 而我在主游戏中几乎没有
  • 手动设置响应状态代码

    我有一个 try catch 块来处理我的应用程序遇到的错误 我想要一种简单的方法来设置对状态代码 403 或禁止的响应 然后将用户重定向到登录页面或自定义错误页面 我在设置状态代码和重定向时遇到一些问题 有人有设置状态代码然后重定向的示例
  • Pandas 将(不等长)列表的列拆分为多列

    这个问题的一个轻微的变体 Pandas 将列表的列拆分为多列 给定一个数据框 col1 0 1 2 0 1 0 1 2 3 4 5 6 0 1 2 3 如何将其转换为列等于最大长度的数据框 col1 col2 col3 col4 col5
  • flutter firebase 数据库和 ListView 构建器问题

    我想在 ListView 中显示我的 shopList 的每一项 但我找不到它一直显示相同记录的原因 请帮助解决这个问题 这里使用代码 从 firebase 数据库获取数据 databaseReference once then DataS
  • 用 C 语言和两个整数发送信号

    你能帮我完成以下任务吗 编写一个C程序 将命令行参数1和2解释为pid和信号号 并将相应的信号号发送到进程pid 要将命令行参数解释为整数 可以使用 C 函数 atoi 用户将通过标准输出得知该过程有多成功 此外 还应使用合适的退出代码 这
  • Java 默认值混乱,为什么函数作用域变量没有默认值? [复制]

    这个问题在这里已经有答案了 我对在我看来不一致的背后的推理感到困惑 例如 public class Test static int a public static void main String args System out print
  • Apache CXF:- 如何使用 cxf 拦截器提取有效负载数据

    我应该遵循哪些步骤来使用 Apache CXF 拦截器提取有效负载 你的拦截器需要从AbstractPhaseInterceptor或子类 public class MyInterceptor extends AbstractPhaseIn
  • 如何回滚 TFS 签入?

    我想回滚最近在 TFS 中所做的更改 在 Subversion 中 这非常简单 然而 在TFS中似乎有一个令人难以置信的头痛问题 选项 1 获取先前版本 手动获取每个文件的先前版本 签出进行编辑 失败 结帐 在 VS2008 中 迫使我获取
  • Java中InputStream的内存问题

    我需要将文件读入字节数组 整个文件需要读入数组 问题是我收到 OutOfMemory 错误 因为文件大小太大 增加 XmX似乎没有任何效果 这是代码片段 InputStream in new FileInputStream file lon
  • 如果选中复选框,如何更改 div 的颜色?

    我有根据数据库记录创建的表 在 tbody 内部 我有 tr 创建每个表行 表行具有同一日期的多个时间段 如果选中复选框 我想更改时间块的背景颜色 我让我的复选框正常工作 我用警报和里面的一些文本进行了测试 现在我正在尝试更改背景颜色 但到
  • 值更改时 Swiftui Textfield 不更新

    我在表单上有一个文本字段 用户可以在其中输入值 但我还想使用按钮更新文本字段的内容 这是我的代码 struct test View State private var amount Double 0 0 var body some View