SwiftUI:工作表第一次无法显示正确的值
Posted
技术标签:
【中文标题】SwiftUI:工作表第一次无法显示正确的值【英文标题】:SwiftUI: Sheet cannot show correct values in first time 【发布时间】:2020-11-12 05:00:40 【问题描述】:我在 SwiftUI 中发现了奇怪的行为。
当我第一次点击列表列时,工作表显示空白文本。 第二次后似乎正确。
你会帮我吗?
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()
list
first tap
after second tap
【问题讨论】:
【参考方案1】:请改用.sheet(item:)
。这是固定代码。
已通过 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
【讨论】:
很好,它对我有用??【参考方案2】:谢谢你,奥米德。
我像这样使用 @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)
)
【讨论】:
还有其他方法,但答案应该尽可能接近提问!我对主题的回答最多 @Omid 我不确定这是不是真的。您使用的是全局变量和sheet(isPresented:content:)
,这对于本示例是错误的(我个人不会接受您的回答)。 Asperi 的解决方案sheet(item:content:)
是正确的。但是 omusubi 的创建 Fruit
结构的解决方案更好(并且可能应该被接受)。以上是关于SwiftUI:工作表第一次无法显示正确的值的主要内容,如果未能解决你的问题,请参考以下文章