首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SwiftUI,我们在列表中安装了一个按钮。为什么当我点击按钮以显示模式,然后再次关闭它时,模式会消失?

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

Stack Overflow用户
提问于 2019-09-25 11:21:43
回答 1查看 361关注 0票数 1

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

这是有原因的吗?有什么解决方案吗?

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

这就是导致错误的代码。

代码语言:javascript
运行
复制
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()
      }
    }
  }
}

这是一个不会导致错误的代码。

代码语言:javascript
运行
复制
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代码如下所示。

代码语言:javascript
运行
复制
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类的主体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 14:22:26

我认为问题在于您的.sheet不在List本身上,而是在代码中导致错误的Button上。

试着这样做:

代码语言:javascript
运行
复制
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()
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58090716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档