swiftui - 从列表中关闭 SwiftUI 模态“工作表”
问题描述
我正在尝试在列表中呈现模式。模态在测试版中已经改变了很多次,但我相信我使用的是正确/最新的方式(从 Xcode Beta 7 开始)。但是,当我从列表中触发模式时,对于每个列表项,它都会打开一次,但以后再也不会打开。
import SwiftUI
//This works perfectly fine
struct BasicTest : View {
struct SampleObject: Identifiable {
var id = UUID()
var name: String
}
let sampleObjects = [
SampleObject(name: "Buffalo"),
SampleObject(name: "Italy"),
SampleObject(name: "Portland"),
]
@State private var showModal:Bool = false
var body: some View {
Button(action: {
print("Modal to open")
self.showModal = true
}) {
Text("Show Modal")
}.sheet(isPresented: self.$showModal)
{
TestDetailView(name: "Example")
}
}
}
#if DEBUG
struct BasicTest_Previews: PreviewProvider {
static var previews: some View {
BasicTest()
}
}
#endif
//this one only opens once
struct ListTest : View {
struct SampleObject: Identifiable {
var id = UUID()
var name: String
}
let sampleObjects = [
SampleObject(name: "Buffalo"),
SampleObject(name: "Italy"),
SampleObject(name: "Portland"),
]
@State private var showModal:Bool = false
var body: some View {
List {
ForEach(sampleObjects) {
item in
Button(action: {
print("Modal to open")
self.showModal = true
}) {
Text("Show Modal for \(item.name)")
}.sheet(isPresented: self.$showModal)
{
TestDetailView(name: item.name)
}
}
}
}
}
#if DEBUG
struct ListTest_Previews: PreviewProvider {
static var previews: some View {
ListTest()
}
}
#endif
struct TestDetailView: View {
@Environment(\.presentationMode) var presentationMode
var name: String
var body: some View {
VStack {
Button(action: {
print("Button clicked")
self.presentationMode.wrappedValue.dismiss()
}) {
Image(systemName: "chevron.compact.down").font(Font.system(.largeTitle).bold())
}
Text(name)
}
}
}
我看不到任何错误消息,只是在尝试第二次打开时闪烁。
解决方案
如果您为列表行创建一个视图并将 .sheet() 移动到那里,它将起作用
推荐阅读
- .net - 无法在 http://localhost:5000/swagger/index.html 访问 .net 5.0 docker 容器
- swift - 快速滚动时无法添加弹簧效果
- ruby-on-rails - 如何使用rails在表单下拉列表中添加本地时区?
- fetch - 如何根据包含字符串模式的字段查询corda vault和检索状态
- go - grpc-gateway/v2/runtime 的未解决参考“MustPattern”
- vue.js - 防止 Chrome 在开发工具打开时将注意力转移到 webpack devServer 重建上
- python - 我的 Alpaca 代理 api 出现身份验证错误
- java - Eclipse RCP 两个 IContentAssistProcessor 无法正常工作
- bash - 了解在 sbatch --wrap 语句中使用反引号进行内部变量替换
- jira - 使用 JIRA API 创建问题 `匿名用户无权在此项目中创建问题。请先尝试登录。`