在一个简单的 SwiftUI 应用程序中,我正在尝试在单击列表中的行时显示工作表。当工作表打开时,已为状态变量分配了单击的列表对象。请参阅下面的代码。
由于某种未知的原因,状态变量为零,当工作表打开时?
我是否误解了 SwiftUI 的某些内容或忘记了有关状态变量的内容。我希望有人能启发我。
import SwiftUI
struct ContentView: View {
class Object: Identifiable {
let id: String
init(_ id: String) { self.id = id }
}
let collection = [Object("1"),Object("2"),Object("3")]
@State var show = false
@State var state: Object?
var body: some View {
List(collection) { item in
HStack{ Text(item.id); Spacer() }
.background(Color.white)
.onTapGesture(count:1, perform: {
self.state = item
show.toggle()
})
}
.sheet(isPresented:$show) {
if state == nil {
Text("Error state == nil ?")
}
else {
Text(state!.id)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该问题是由于在单击按钮之前创建了工作表。您的场景的解决方案是使用.sheet(item:方法。
这是更正后的代码。使用 Xcode 12.1 / iOS 14.1 进行测试
struct ContentView: View {
class Object: Identifiable {
let id: String
init(_ id: String) { self.id = id }
}
let collection = [Object("1"),Object("2"),Object("3")]
@State var state: Object?
var body: some View {
List(collection) { item in
HStack{ Text(item.id); Spacer() }
.background(Color.white)
.onTapGesture(count:1, perform: {
self.state = item
})
}
.sheet(item: $state) { item in
Text(item.id)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |