我现在正在学习使用Xcode11的官方版本为SwiftUI创建示例代码。我写了一个简单的代码来显示和隐藏模式。这段代码向列表中添加一个按钮,并显示一个模式。然而,奇怪的是,当关闭后再次点击按钮时,模式不再出现。
这是有原因的吗?有什么解决方案吗?
当列表中有一个按钮时发生,但如果只从代码中删除该列表,则可以根据需要多次显示模式。
这就是导致错误的代码。
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()
}
}
}
}
这是一个不会导致错误的代码。
struct ContentView: View {
@State var show_modal = false
var body: some View {
Button(action: {
print("Button Pushed")
self.show_modal = true
}) {
Text("Show Modal")
}.sheet(isPresented: self.$show_modal, onDismiss: {
print("dismiss")
}) {
ModalView()
}
}
}
唯一的区别是是否有一个列表。
ModalView代码如下所示。
struct ModalView: View {
// 1. Add the environment variable
@Environment(\.presentationMode) var presentationMode
var body: some View {
// 2. Embed Text in a VStack
VStack {
// 3. Add a button with the following action
Button(action: {
print("dismisses form")
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Dismiss")
}.padding(.bottom, 50)
Text("This is a modal")
}
}
}
当设置断点时,每次都会调用print (“按下按钮”),但不会调用.sheet的ModalView,自然也不会调用ModalView类的主体。
发布于 2019-09-25 06:22:26
我认为问题在于您的.sheet
不在List
本身上,而是在代码中导致错误的Button
上。
试着这样做:
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()
}
}
}
https://stackoverflow.com/questions/58090716
复制相似问题