SwiftUI 显示带有绑定变量的工作表在首次显示时不起作用

2024-06-28

我试图在工作表中呈现一个带有 @Binding String 变量的视图,该变量仅在 TextField 中显示/绑定该变量。

在我的主 ContentView 中,我有一个字符串数组,我用 ForEach 循环遍历数组的索引来显示它,并显示一个按钮,每个按钮都包含循环元素的文本。

按钮操作很简单:将 @State“索引”变量设置为按下的按钮的元素索引并显示工作表。

这是我的内容视图:

struct ContentView: View {
    
    @State var array = ["first", "second", "third"]
    @State var showIndex = 0
    @State var showSheet = false
    
    var body: some View {
        VStack {
            ForEach (0 ..< array.count, id:\.self) { i in
                Button("\(array[i])") {
                    showIndex = i
                    showSheet = true
                }
            }
            // Text("\(showIndex)") // if I uncomment this line, it works!
        }
        .sheet(isPresented: $showSheet, content: {
            SheetView(text: $array[showIndex])
        })
        .padding()
    }
}

这是 SheetView:

struct SheetView: View {
    @Binding var text: String
    @Environment(\.presentationMode) var presentationMode
    
    var body: some View {
        VStack {
            TextField("text:", text: $text)
            Button("dismiss") {
                presentationMode.wrappedValue.dismiss()
            }
        }.padding()
    }
}

问题是,当我第一次打开应用程序并按“第二个”按钮时,工作表将打开并在文本字段中显示“第一个”。然后我可以关闭工作表并再次按“第二个”按钮,得到相同的结果。

如果我按下“第三个”或“第一个”按钮,从那时起一切都会正常。按任何按钮都会产生正确的行为。

Preview https://i.stack.imgur.com/4IU5H.gif

有趣的是,如果我取消注释带有显示 showIndex 变量的文本的行,它从第一次就可以工作。

这是一个错误,还是我在这里做错了什么?


您应该使用自定义 Binding、自定义 Struct 来解决问题,这是一个复杂的问题。参见示例:

struct ContentView: View {
    
    @State private var array: [String] = ["first", "second", "third"]
    @State private var customStruct: CustomStruct?
    
    
    var body: some View {
        VStack {
            
            ForEach (array.indices, id:\.self) { index in
                
                Button(action: { customStruct = CustomStruct(int: index) }, label: {
                    Text(array[index]).frame(width: 100)
                    
                })
                
            }
            
        }
        .frame(width: 300, height: 300, alignment: .center)
        .background(Color.gray.opacity(0.5))
        .sheet(item: $customStruct, content: { item in SheetView(text: Binding.init(get: { () -> String in return array[item.int] },
                                                                                    set: { (newValue) in array[item.int] = newValue }) ) })
    }
}



struct CustomStruct: Identifiable {
    let id: UUID = UUID()
    var int: Int
}



struct SheetView: View {
    @Binding var text: String
    @Environment(\.presentationMode) var presentationMode
    
    var body: some View {
        VStack {
            TextField("text:", text: $text)
            Button("dismiss") {
                presentationMode.wrappedValue.dismiss()
            }
        }.padding()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 显示带有绑定变量的工作表在首次显示时不起作用 的相关文章

  • 如何在 m1 Mac 上安装 pandas

    clang Wno unused result Wsign compare Wunreachable code fno common dynamic DNDEBUG g fwrapv O3 Wall iwithsysroot System
  • 我可以在 Mac OS X 上将 enthought python 重新链接到新版本的 openssl 吗?

    今天早上 我在 Mac OS X 10 6 8 上使用 EPD 7 3 时遇到了与 SSL 相关的问题 当我运行 pip 版本 1 3 1 时 我得到 pip install requests Downloading unpacking r
  • Mac OS X 的自动热键替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 由于无法确认开发者身份而无法打开

    我在 Mac OSX 中开发了一个应用程序和守护进程 并且我已经在 xcode 中与开发者 ID 签署了应用程序和守护进程源代码 在守护进程中 我已经对每个框架进行了签名并打包 并且我使用软件包安装程序对所有框架进行了 pkg 现在我的应用
  • bash - 从文本文件中删除多行不同的文本

    我正在处理大量日志文件 并且大多数日志文件都有大量被记录多次的重复字符串 为了使与此类事情没有太多关系的其他人 也为我自己 轻松查看日志 我想制作一个脚本来删除一些可能对其他人造成 误报 的文本行 嘿管理员 我多次出现这些错误 gt 叹息
  • Mac 上使用 Excel VBA 进行正则表达式

    我需要将 regEx 与 Excel VBA 一起使用 我使用的是 Mac OS 10 10 和 Office 2011 因此没有可以使用的 DLL 文件 这里有什么可做的 我读到我必须绑定一个苹果脚本 这是如何完成的以及该脚本需要什么内容
  • 自定义导航栏 SwiftUI 上仅可见后退按钮

    我在之前的视图之一中有一个 NavigationView 但是 如果我不向此视图添加另一个导航视图 我只会看到带有默认 当我将导航视图添加到该视图时 我有双导航栏 一个带有 我创建的一个 找不到摆脱这个问题的方法 struct MainPa
  • Brew Postgresql 启动但进程未运行

    我在 Mac 上通过 Brew 安装了 Postgres 然后 我尝试启动它 gt brew services restart postgres Stopping postgresql might take a while gt Succe
  • npm 不起作用,总是出现此错误 -> 错误:找不到模块 'are-we-there-yet'

    我尝试在 Mac 上使用 Yosemite 安装 grunt 节点已经安装在最新版本中 如果我在终端中输入 node v 我会得到 v0 12 5 行 那挺好的 但是当我想用 npm 安装某些东西时 我只得到一个错误 我尝试了 sudo n
  • 如何在 mac yosemite 上撤消“brew link --force openssl”

    我在尝试使用 php54 升级酿造公式时遇到了一些问题 我在github上找到了一些解决这个问题的建议openssl php 酿造错误 https github com Homebrew homebrew php issues 1181 其
  • 配置 2 在按钮 swiftUI 中发出警报消息

    我要学习 swift 和 swiftUI 我申请按类别整理笔记 如果需要的话 你可以在我的 GitHub 中找到我的项目 https github com yoan8306 List Notes https github com yoan8
  • Pip 突然使用了错误版本的 Python

    在 os x 上使用 pip 时遇到一个奇怪的问题 据我所知 快速查看我的 bash history 似乎可以确认 我最近没有对我的配置进行任何更改 唉 pip 命令似乎突然使用了与以前不同的 python 版本 到目前为止 我使用命令 p
  • 使用 Objective-C 或任何 Cocoa API 以编程方式在 Mac OS 上创建新用户? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 访问全局函数内的环境变量 - SwiftUI + CoreData

    我正在开发一个列表应用程序 并且我有一些针对一种特定数据类型的添加 删除 编辑 加载功能 但是我想概括这些功能 这样我就可以从内部对任何数据类型执行相同的操作任何观点 我已经设置了一个全局变量类 import SwiftUI import
  • 如何在 Mac v 10.7.2 上安装/使用 php

    我是对使用 PHP 感兴趣的普通大学生 谁能告诉我 101 如何使用简单明了的语言在 mac 版本 10 7 2 上安装 启用它 我将感谢任何和所有的帮助 Cheers 无需安装 PHP 或 Apache 它们已随 Mac 10 7 一起提
  • SwiftUI |警告:绑定首选项_尝试每帧更新多次。可能的原因?

    自从我按照偏好工作以来 PreferenceKey 我在控制台中收到此消息 Bound preference tried to update multiple times per frame 经过无数次的研究 我还没有找到任何方法可以让它安
  • 使用CloudKit获取用户记录ID失败

    我正在尝试使用 CloudKit 查找用户记录 ID 我已验证帐户状态为CKAccountStatusAvailable 然后我试试这个 CKContainer defaultContainer fetchUserRecordIDWithC
  • Cocoa 在特定屏幕上显示 NSWindow

    在 Mac 应用程序中如何打开NSWindow在特定的NSScreen 假设第二个屏幕 这就是我显示窗口的方式 但它只显示在主屏幕上 self windowController NSStoryboard name Main bundle n
  • Android update 17 似乎与外部 Jars 不兼容

    我刚刚允许我的 Mac 对其 Java 安装进行更新 现在我的一些旧罐子 例如javax mail and apache commons httpclient 正在投掷 找不到类 运行时异常 意思是 它们编译得很好 但在运行时崩溃 出现如下
  • OSX 的网络连接 NSNotification?

    我只需要在分配有效 IP 地址时发出通知即可 我尝试过通过 SCreachability 进行轮询 但这似乎效率低下 有什么建议么 这看起来应该很简单 但我已经努力了几个小时才能让任何东西发挥作用 我知道这有点旧 但所选的答案并不理想 SC

随机推荐

  • 使用 selenium (python) 时出现“对象不可调用”错误

    我用的是browser switch to alert accept 处理 javascript 警报弹出窗口 但我收到了这样的错误 TypeError Alert object is not callable 我该如何解决这个问题 警报对
  • Visual Studio Code (Windows) 未检测到全局 NPM 模块

    我遇到一个问题 Windows 10 中的 Visual Studio Code 无法检测集成终端中全局安装的 NPM 包 例如 如果我安装 Windows 命令提示符 angular cli通过命令npm install g angula
  • 使用 node.js 和 socket.io 阻止 CORS

    我最近开始学习node js和socket io 我遵循了 socket io 的简单教程 在我的计算机上运行时一切正常 但是 我决定将客户端部分上传到服务器进行测试 这就是问题开始的地方 我想在网络主机上运行聊天客户端 并在我的计算机或其
  • 为什么摩尔定律需要并行计算? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这是我一本CS教科书中的一个问题 我很茫然 我不明白为什么它一定会导致并行计算 有人想指出我正确的方向吗 摩尔定律只是说 价格合理的集成电路上的晶体管
  • Laravel 队列不作为后台运行

    你好 我创建了一个 Laravel 队列作业来发送邮件 public function handle foreach this gt emails as value to value gt email subject this gt dat
  • VB6 IIf优势

    使用是否有性能优势IIf over If 除了简单地减少代码之外 还有什么区别 If msInitialFloodSection lt gt Trim cboFloodSection Text Then mbFloodSectionChan
  • PostgreSQL 的默认用户名和密码是什么?

    我正在开发一个默认使用 PostgreSQL 的开源应用程序DBMS https en wikipedia org wiki Database Database management system 现在 当我在系统上安装它时 它的配置是 P
  • 多态与策略模式

    两者有什么区别Strategy图案和Polymorphism在Java中 我很困惑 通过策略模式实现的任何目标基本上都可以通过多态性实现 如果我在这方面错了 请纠正我 请还提供我的例子来消除我的困惑 对我来说 链接来自CKing https
  • 从 32 位 x86 汇编代码读取,计算程序有多少字节的方法是什么

    我正在做一个简单的堆栈粉碎练习 我需要在程序集中写入特定偏移量的短跳转 我需要计算两条指令分隔的字节数的偏移量 我一直在搜索谷歌 但我似乎无法找到正确的搜索词 例如 我知道mov操作码是2个字节 但是整个指令有多少字节取决于您的src an
  • 如何为移动页面创建 HTML 图像下载链接?

    我有一个包含图像的移动 html 页面 我想创建一个用于下载图像的按钮或链接 然后 图像应保存到用户的移动图像库中 我看过这个帖子 如何在 html 中创建下载链接 https stackoverflow com questions 279
  • php 连接池 mysql [重复]

    这个问题在这里已经有答案了 我打算使用MYSQL 有可用的连接池扩展吗 或者说连接的正常做法是什么 是不是到处都用这个啊 mysqli connect localhost xxx xxx test 人们正常使用吗mysql connect
  • 如何在插入后获取插入的行 ID 以及相关数据而不插入相关数据

    我有一组数据需要在表中产生新行 创建此行后 我需要将元数据附加到与此信息相关的单独表中 那就是我需要创建我的 Identity 首先 得到GlobalId从行返回 然后附加 Accounts and Metadata to it 插入数据并
  • Aptana Studio 有 NodeJS 插件吗?

    Aptana Studio 有 NodeJS 插件吗 至少对于 NodeJS 代码辅助来说是这样 也许是创建 NodeJS 项目的一种方法 以及本地NodeJS调试 目前我们没有 NodeJS 支持 如果社区对此感兴趣 那么提交功能请求并对
  • 如何在 GAE Standard Go 中缩小到 0 个实例

    我已将 Golang 应用程序部署到 Google Cloud Platform 的 App Engine 标准环境 我的 app yaml 包含以下几行 automatic scaling min idle instances 0 max
  • C# ObservableCollection OnCollectionChanged 在项目更改时不会触发

    来自 MSDN 关于 OnCollectionChanged 的 内容 在添加 删除 更改 移动项目或刷新整个列表时发生 我正在更改附加到位于我的集合中的 obj 的属性 但 OnCollectionChanged 未触发 我正在 obj
  • jTextField 仅接受字母和空格

    我希望用户只输入字母或空格 如果用户输入其他字符 我想用 jOptionPane 给出消息 我已经搜索并尝试了下面的代码 if Pattern matches a zA Z answerField1 getText JOptionPane
  • Netty 的 HashedWheelTimer 和 Quartz 的调度程序哪个更高效?

    散列轮定时器 http docs jboss org netty 3 1 api org jboss netty util HashedWheelTimer html是基于这篇 1987 年的论文 http www cs columbia
  • 如何从Python中的文件路径中提取文件夹路径?

    我只想获取文件完整路径中的文件夹路径 例如T Data DBDesign DBDesign 93 v141b mdb我想得到只是T Data DBDesign 不包括 DBDesign 93 v141b mdb 我尝试过这样的事情 exis
  • 使用 Bootstrap 折叠侧边栏

    我刚刚访问了这个页面http www elmastudio de https web archive org web 20131015001517 https www elmastudio de 并想知道是否可以使用 Bootstrap 3
  • SwiftUI 显示带有绑定变量的工作表在首次显示时不起作用

    我试图在工作表中呈现一个带有 Binding String 变量的视图 该变量仅在 TextField 中显示 绑定该变量 在我的主 ContentView 中 我有一个字符串数组 我用 ForEach 循环遍历数组的索引来显示它 并显示一