SwiftUI:ForEach循环内sheet(isPresented)始终打开首个实例求助
SwiftUI 遍历数组弹出对应Sheet错误问题解决
问题描述
我有一个Table对象数组,通过ForEach遍历后将每个Table的名称显示为按钮,点击按钮本该弹出对应Table的编辑Sheet(EditTable)。但实际运行时,按钮标签table.name都正确且唯一,可无论点击哪个按钮,都会打开数组里的第一个Table。我猜测这和循环里复用showSheetTable状态有关,但不知道怎么修正。
原错误代码
@State var tables: [Table] @State var showSheetTable = false ... ForEach(tables) { table in VStack { Button(table.name) { self.showSheetTable.toggle() } .font(.headline) .sheet(isPresented: $showSheetTable) { EditTable(table: table) } } }
解决方案
用户jnpdx解决了该问题,核心思路是用可选类型的selectedTable存储选中的对象,通过sheet(item:)绑定这个对象来展示对应Sheet,避免循环中复用同一个布尔状态导致的错误。
正确代码
@State var tables: [Table] @State var selectedTable: Table? = nil ... ForEach(tables) { table in VStack { Button(table.name) { selectedTable = table } .font(.headline) } } .sheet(item: $selectedTable) { table in EditTable(table: table) }
内容的提问来源于stack exchange,提问作者Peel
相关产品推荐
相关产品推荐

