点击按钮显示模态视图后,再次关闭它时,模态视图会消失的原因是因为按钮点击事件触发了视图状态的改变,导致模态视图的显示与隐藏发生了变化。
在SwiftUI中,视图状态是由@State
属性包装器来管理的。当按钮被点击时,按钮的点击事件会改变@State
属性的值,从而触发视图的重新渲染。在模态视图显示时,@State
属性的值被设置为true,从而显示模态视图;当再次点击按钮关闭模态视图时,@State
属性的值被设置为false,导致模态视图消失。
要解决这个问题,可以使用@Binding
属性包装器来将模态视图的显示状态与按钮的点击事件进行绑定。首先,在父视图中创建一个@State
属性来管理模态视图的显示状态,并将其作为@Binding
参数传递给子视图。然后,将按钮的点击事件改为修改@Binding
属性的值。这样,在点击按钮时,按钮事件改变了@Binding
属性的值,从而触发视图的重新渲染,但模态视图的显示状态仍然保持不变。
以下是示例代码:
struct ContentView: View {
@State private var isModalVisible = false
var body: some View {
VStack {
Button("Show Modal") {
self.isModalVisible = true
}
}
.sheet(isPresented: $isModalVisible) {
ModalView(isModalVisible: self.$isModalVisible)
}
}
}
struct ModalView: View {
@Binding var isModalVisible: Bool
var body: some View {
VStack {
Text("Modal View")
Button("Close") {
self.isModalVisible = false
}
}
}
}
在这个例子中,当点击按钮时,isModalVisible
属性的值会改变,从而触发模态视图的显示;当点击模态视图中的关闭按钮时,isModalVisible
属性的值被修改为false,从而关闭模态视图。
领取专属 10元无门槛券
手把手带您无忧上云