SwiftUI 工作表显示数据错误的工作表 [英] SwiftUI sheet shows sheet with wrong data
问题描述
我有一个显示 1、2 和 3 的列表.当点击文本时,应用程序会打开一个工作表,点击数字.但是,如果我点击第二行或第三行的文本,工作表中显示的数字仍然是 1.我做错了什么?
I have a list that displays 1, 2, and 3. When the text is tapped the app opens a sheet with the number tapped. However, if I tap the text in the second or third row, the number displayed in the sheet is still 1. What am I doing wrong?
import SwiftUI
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var shouldPresentSheet = false
var body: some View {
List(self.numbers, id: \.self) { number in
Text("number: \(number)").sheet(isPresented: self.$shouldPresentSheet) {
Text("This is sheet number \(number)")
}.onTapGesture {
self.shouldPresentSheet.toggle()
}
}
}
}
推荐答案
您需要创建一个工作表而不是多个工作表.
You need to create one sheet instead of multiple sheets.
如果你想使用 .sheet(isPresented:content:)
你可以执行以下操作:
If you want to use .sheet(isPresented:content:)
you can do the following:
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var selectedNumber: Int?
var body: some View {
List(numbers, id: \.self) { number in
Text("number: \(number)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(isPresented: binding) {
Text("This is a sheet number \(self.selectedNumber ?? 0)")
}
}
var binding: Binding<Bool> {
.init(
get: { self.selectedNumber != nil },
set: { _ in }
)
}
}
或者你可以使用 .sheet(item:content:)
:
struct Model: Identifiable {
let id: Int
}
struct ContentView: View {
var numbers = [1, 2, 3].map(Model.init)
@State private var selectedNumber: Model?
var body: some View {
List(numbers, id: \.id) { number in
Text("number: \(number.id)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(item: $selectedNumber) { item in
Text("This is a sheet number \(item.id)")
}
}
}
编辑
如果您决定使用 .sheet(item:content:)
,您可以向 Int
添加扩展(而不是创建符合 Identifiable
):
If you decide to use .sheet(item:content:)
you can add an extension to Int
(instead of creating a custom struct conforming to Identifiable
):
extension Int: Identifiable {
public var id: Int { self }
}
如Asperi 的回答中所提议.
这篇关于SwiftUI 工作表显示数据错误的工作表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!