SwiftUI 关闭模式

2023-12-05

由于 SwiftUI 是声明式的,因此没有dismiss方法。 如何添加关闭/关闭按钮DetailView?

struct DetailView: View {
  var body: some View {
  Text("Detail")
  }
}

struct ContentView : View {
  var body: some View {
  PresentationButton(Text("Click to show"), destination: DetailView())
  }
}

使用@State属性包装器(推荐)

struct ContentView: View {
    @State private var showModal = false
    
    var body: some View {
       Button("Show Modal") {
          self.showModal.toggle()
       }.sheet(isPresented: $showModal) {
            ModalView(showModal: self.$showModal)
        }
    }
}

struct ModalView: View {
    @Binding var showModal: Bool
    
    var body: some View {
        Text("Modal view")
        Button("Dismiss") {
            self.showModal.toggle()
        }
    }
}

使用演示模式

您可以使用presentationMode模态视图中的环境变量并调用self.presentaionMode.wrappedValue.dismiss()关闭模式:

struct ContentView: View {

  @State private var showModal = false

  // If you are getting the "can only present once" issue, add this here.
  // Fixes the problem, but not sure why; feel free to edit/explain below.
  @SwiftUI.Environment(\.presentationMode) private var presentationMode: Binding<PresentationMode>


  var body: some View {
    Button(action: {
        self.showModal = true
    }) {
        Text("Show modal")
    }.sheet(isPresented: self.$showModal) {
        ModalView()
    }
  }
}


struct ModalView: View {

  @Environment(\.presentationMode) private var presentationMode

  var body: some View {
    Group {
      Text("Modal view")
      Button(action: {
         self.presentationMode.wrappedValue.dismiss()
      }) {
        Text("Dismiss")
      }
    }
  }
}

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 关闭模式 的相关文章

随机推荐

  • 单次跳跃最多回溯 n 个楼梯,最多 k 步

    您需要爬一个有 n 个台阶的楼梯 并且您决定通过跳上台阶来获得一些额外的锻炼 单次跳跃最多可以完成 k 步 返回爬楼梯时所有可能的跳跃顺序 并排序 我的实施显然给了我错误的答案 def climbingStaircase n k final
  • 创建 Outlook 规则以根据主题行中的文本创建文件夹(如果需要)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在寻找一种清晰的方法来使用 vba 读取收到电子邮件的主题行 以便创建新文件夹或仅使用现有文件夹将电子邮件移入 我看过一些 vba 示例 但没有一个解决在 Outlook 的
  • 如何在新的heroku应用程序中使用okta oauth登录

    我在我的express node js 应用程序中使用okta oauth 当我在 heroku 中部署并运行新应用程序并浏览登录页面时 我收到 404 状态代码 由于某种原因 我无法验证我的第三方 okta 应用程序的合法性 然而 在本地
  • Cookie 不会删除

    所以我的index php 中有这样的代码 如果用户选中了记住我框 那么它将设置一个名为 RememberMe 的 cookie 有效期为 2 周 这部分工作正常 现在我遇到的问题是当他们按下注销时删除这个cookie 按注销后 它们会被重
  • 替换字符串中的单个字符

    问题是需要替换给定字符串中的单个字符 同时保留字符串中的其他字符 代码是 if command equalsIgnoreCase replace single System out println Enter the character t
  • 保持两个线程之间的布尔值同步

    在一个线程 线程2 中 我更改了一个值 例如 CheckSuccess false 现在主线程 thread1 GUI Form 没有接收到更改 如何 传播 所有线程周围的更改 我的印象是线程应该操纵数据 而不是在单独的实例上工作 除非被告
  • 何时何地放置 @class 声明

    我正在开发一个包含多个自定义类的项目 我有一个CardModel NSObject 具有一些整数属性来保存数据 以及Deck NSObject 有一个数组可以容纳一堆CardModels然后一个CardView UIView 有一个Card
  • javax.faces.FacesException:表达式错误:命名对象:net.bootsfaces.layout.Well 未找到

    我正在尝试使用 BootsFaces 0 7 测试 JSF 2 2 项目 该项目在 GlassFish 3 和 PrimeFaces 5 2 上运行得非常顺利 但是在使用 BootsFaces 库中的任何标签的页面上 例如
  • 在 C 中哪种方式更好地将数组作为函数参数传递?

    有 3 种方法将数组作为函数参数传递 形式参数为一个指针 e g void myFunction int param 形式参数为一个指定大小的数组 e g void myFunction int param 10 形式参数为未调整大小的数组
  • 使用 .htaccess 清理 URL

    我正在尝试重定向我的域上的链接 我想要实现的是 当用户点击链接时 mydomain com index php dir myfolder 我希望他被重定向到这个 URL 但浏览器栏应该显示这个 URL mydomain com myfold
  • 将txt解析为块

    我有一个txt文件 其结构如下 start id 1 date 21 05 2018 summ 500 end start id 7 date 23 05 2018 summ 500 owner guest end 我需要在字典列表中解析它
  • Silverlight - Scrollviewer 中的 DataGrid,Column.Width="*" 使数据网格占据多个屏幕宽度

    当我进行以下设置时 宽度为 的最后一列会导致数据网格创建巨大的水平滚动条 将网格扩展到屏幕的多个宽度 我不太确定为什么会这样 但我确实需要一种方法来避免这种情况 我不想用 长度 模拟 列 编辑 显然我不是唯一注意到这一点的人 http co
  • 在 macos 上使用 pyinstaller 编译 mediapipe 时出现问题

    我在 macos 上通过 pyinstaller 使用 mediapipe 编译项目时遇到问题 到目前为止我尝试过 pyinstaller windowed noconsole pose edge py pyinstaller onefil
  • AJAX 响应 XML 错误

    在发出 AJAX 请求和处理响应时 我遇到了一些奇怪的问题 我正在对 xml 文件进行 ajax 调用 但是 当我收到响应时 xhr responseText 属性在 Firefox 中工作正常 但在 IE 中却不行 另一件事是我试图将 x
  • Tradingview Pine 脚本保存策略输入时的收盘价

    嘿 我正在尝试将策略时的收盘价保存到变量中 以便稍后可以使用它退出 if condition strategy entry long true buyprice close strategy exit exit long when clos
  • 跟踪每个进程的 CPU 和内存使用情况

    我怀疑我的一个应用程序占用的 CPU 周期比我想要的要多 问题是 它突然发生 仅仅查看任务管理器对我没有帮助 因为它只显示立即使用情况 有没有办法 在 Windows 上 跟踪某些进程的 CPU 和内存使用历史记录 例如 我将开始跟踪 fi
  • C# - 反序列化 JSON 对象

    我正在尝试将以下 json 绑定到一个列表 请注意 每个字符串可以包含多个元素 因此列表将如下所示 红黑 blue 橙色 蓝色 红色 黑色 粉色 shoes red black shoes blue shoes orange blue re
  • Android 上的 VOIP 库或示例代码

    提前致谢 我正在 Android 上开发 VOIP 应用程序 是否有任何开源代码 库或示例应用程序可供 VOIP 软件开发人员快速创建 VOIP 应用程序 提前致谢 其实我不知道使用过程voip在android应用程序中 那么如何在应用程序
  • 如何在 Java 中使用 Selenium WebDriver 打开新选项卡?

    如何使用 Java 中的 Selenium WebDriver 又名 Selenium 2 在现有 Firefox 浏览器中打开新选项卡 仅供任何在 Ruby Python 和 C 绑定 Selenium 2 33 0 中寻找答案的人使用
  • SwiftUI 关闭模式

    由于 SwiftUI 是声明式的 因此没有dismiss方法 如何添加关闭 关闭按钮DetailView struct DetailView View var body some View Text Detail struct Conten