Ios SwiftUI:工作表无法在第一次显示正确的值
我在SwiftUI中发现了奇怪的行为 当我第一次点击列表列时,工作表显示空文本。 第二次之后似乎是正确的 你能帮我吗Ios SwiftUI:工作表无法在第一次显示正确的值,ios,list,swiftui,Ios,List,Swiftui,我在SwiftUI中发现了奇怪的行为 当我第一次点击列表列时,工作表显示空文本。 第二次之后似乎是正确的 你能帮我吗 import SwiftUI let fruits: [String] = [ "Apple", "Banana", "Orange", ] struct ContentView: View { @State var isShowintSheet = false @State
import SwiftUI
let fruits: [String] = [
"Apple",
"Banana",
"Orange",
]
struct ContentView: View {
@State var isShowintSheet = false
@State var selected: String = ""
var body: some View {
NavigationView {
List(fruits, id: \.self) { fruit in
Button(action: {
selected = fruit
isShowintSheet = true
}) {
Text(fruit)
}
}
}
.sheet(isPresented: $isShowintSheet, content: {
Text(selected)
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
改用.sheet(项目:)
。这是固定代码
使用Xcode 12.1/iOS 14.1进行验证
struct ContentView: View {
@State var selected: String?
var body: some View {
NavigationView {
List(fruits, id: \.self) { fruit in
Button(action: {
selected = fruit
}) {
Text(fruit)
}
}
}
.sheet(item: $selected, content: { item in
Text(item)
})
}
}
extension String: Identifiable {
public var id: String { self }
}
谢谢你,奥米德
我使用@State更改了Asperi的代码,如下所示
import SwiftUI
struct Fruit: Identifiable, Hashable {
var name: String
var id = UUID()
}
let fruits: [Fruit] = [
Fruit(name: "Apple"),
Fruit(name: "Banana"),
Fruit(name: "Orange"),
]
struct ContentView: View {
@State var selected: Fruit?
var body: some View {
NavigationView {
List(fruits, id: \.self) { fruit in
Button(action: {
selected = fruit
}) {
Text(fruit.name)
}
}
}
.sheet(item: $selected, content: { item in
Text(item.name)
})
}
}
还有其他方法,但答案应该尽可能接近问题!我的答案最有说服力topic@Omid我不确定那是不是真的。您使用的是一个全局变量和
工作表(isPresented:content:)
,这在本例中是错误的(我个人不接受您的答案)。Asperi的解决方案表(项目:内容:)
是正确的。但omusubi创建水果
结构的解决方案甚至更好(而且可能是公认的解决方案)。