我现在正在学习使用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类的主体。
答案 0 :(得分:0)
我认为问题在于您的.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()
}
}
}