使用 SwiftUI,我们在 List 中安装了一个 Button。为啥当我点击按钮显示模态然后再次关闭时模态消失?
Posted
技术标签:
【中文标题】使用 SwiftUI,我们在 List 中安装了一个 Button。为啥当我点击按钮显示模态然后再次关闭时模态消失?【英文标题】:Using SwiftUI, we installed a Button in the List. Why does the modal disappear when I tap the button to display the modal and then close it again?使用 SwiftUI,我们在 List 中安装了一个 Button。为什么当我点击按钮显示模态然后再次关闭时模态消失? 【发布时间】:2019-09-25 03:21:42 【问题描述】:我现在正在学习使用 Xcode11 的官方版本为 SwiftUI 创建示例代码。 我写了一个简单的代码来显示和隐藏模态。 此代码将一个按钮添加到列表并显示一个模式。 然而奇怪的是,关闭后再次点击按钮时,模式不再出现。
是否有这样做的原因或任何解决方案?
当列表中有按钮时发生,但如果你只从代码中删除列表,那么modal可以显示任意多次。
这是导致错误的代码。
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()
唯一的区别是有没有List。
模态视图代码如下。
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("Button Pushed"),但是.sheet的ModalView没有被调用,自然ModalView类的body也没有被调用。
【问题讨论】:
我的回答有帮助吗? 您的建议解决了问题。这是一个非常大的帮助。 【参考方案1】:我认为问题在于您的.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()
【讨论】:
我选择了最佳答案。非常感谢。以上是关于使用 SwiftUI,我们在 List 中安装了一个 Button。为啥当我点击按钮显示模态然后再次关闭时模态消失?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何知道是不是已经使用 adb 在 android 设备中安装了任何应用程序?
在沙箱中安装了 parsec,但在 ghci 中尝试加载文件时找不到库