使用SwiftUI,我们在列表中安装了一个按钮。为什么当我点击按钮显示模式并再次关闭时,模式会消失?

使用SwiftUI,我们在列表中安装了一个按钮。为什么当我点击按钮显示模式并再次关闭时,模式会消失?,swiftui,xcode11,Swiftui,Xcode11,我现在正在学习使用Xcode11的官方版本为SwiftUI创建一个示例代码。 我编写了一个简单的代码来显示和隐藏模态。 此代码向列表中添加一个按钮并显示一个模式。 然而,奇怪的是,当关闭后再次点击按钮时,模式不再出现 这是有原因的还是有解决办法的 当列表中有按钮时发生,但如果仅从代码中删除列表,则可以根据需要多次显示模式 这是导致错误的代码 struct ContentView:View{ @状态变量show_modal=false var body:一些观点{ 名单{ 按钮(操作:{ 打印(“

我现在正在学习使用Xcode11的官方版本为SwiftUI创建一个示例代码。 我编写了一个简单的代码来显示和隐藏模态。 此代码向列表中添加一个按钮并显示一个模式。 然而,奇怪的是,当关闭后再次点击按钮时,模式不再出现

这是有原因的还是有解决办法的

当列表中有按钮时发生,但如果仅从代码中删除列表,则可以根据需要多次显示模式

这是导致错误的代码

struct ContentView:View{
@状态变量show_modal=false
var body:一些观点{
名单{
按钮(操作:{
打印(“按下按钮”)
self.show_modal=true
}) {
文本(“显示模态”)
}.sheet(显示:self.$show_model,onDismiss:{
打印(“驳回”)
}) {
莫达维尤()
}
}
}
}
这是一段不会引起bug的代码

struct ContentView:View{
@状态变量show_modal=false
var body:一些观点{
按钮(操作:{
打印(“按下按钮”)
self.show_modal=true
}) {
文本(“显示模态”)
}.sheet(显示:self.$show_model,onDismiss:{
打印(“驳回”)
}) {
莫达维尤()
}
}
}
唯一的区别是是否有列表

下面是ModalView代码

struct-ModalView:View{
//1.添加环境变量
@环境(\.presentationMode)变量presentationMode
var body:一些观点{
//2.在VStack中嵌入文本
VStack{
//3.添加具有以下操作的按钮
按钮(操作:{
打印(“解雇表格”)
self.presentationMode.wrappedValue.discouse()文件
}) {
文本(“驳回”)
}.padding(.bottom,50)
文本(“这是一个模态”)
}
}
}

设置断点后,每次都会调用print(“Button Pushed”),但不会调用.sheet的ModalView,当然也不会调用ModalView类的主体。

我认为问题在于,
.sheet
不在
列表
上,而是在导致错误的代码中的
按钮

请尝试以下方法:

struct ContentView: View {
    @State var show_modal = false
    var body: some View {
        List {
            Button(action: {
                print("Button Pushed")
                self.show_modal = true
            }) {
                Text("Show Modal")
            }
        }.sheet(isPresented: self.$show_modal, onDismiss: {
            print("dismiss")
        }) {
            ModalView()
        }
    }
}

我认为问题在于,您的
.sheet
不在
列表
上,而是在导致错误的代码中的
按钮上

请尝试以下方法:

struct ContentView: View {
    @State var show_modal = false
    var body: some View {
        List {
            Button(action: {
                print("Button Pushed")
                self.show_modal = true
            }) {
                Text("Show Modal")
            }
        }.sheet(isPresented: self.$show_modal, onDismiss: {
            print("dismiss")
        }) {
            ModalView()
        }
    }
}

我的回答有用吗?你的建议解决了问题。这真是帮了大忙。我的回答有用吗?你的建议解决了问题。这真是帮了大忙。我选择了最好的答案。非常感谢。我选择了最好的答案。非常感谢你。