SwiftUI:清除模态状态或重新初始化

2024-01-27

我有一个 SwiftUI 模式,我想清除其状态或重新初始化。考虑到此模式可以打开可能具有某种状态的其他模式,重新初始化将是首选。

这是一个简单的例子:

import SwiftUI

struct OtherView: View {
    @State var otherViewState: String = ""

    var body: some View {
        TextField($otherViewState, placeholder: Text("Demo Text Input"))
    }
}

struct Demo: View {
    @State var showModal: Bool = false

    var modal: Modal {
        Modal(OtherView(), onDismiss: { self.showModal = false })
    }

    var body: some View {
        Button(action: { self.showModal = true }) {
            Text("Toggle Modal")
        }
        .presentation(self.showModal ? self.modal : nil)
    }
}

无论 OtherView 如何被关闭,我都想重新打开它并清除其文本状态,并要求 OtherView 可以打开模态本身。添加一个clearOtherView 结构本身的方法始终是一种选择,但我认为它不是一个可维护的方法。

Below is a video of the simplified problem: Demo


9月11日更新:这似乎在 iOS 13 GM 中得到了修复。

我一直在为同样的事情而苦苦挣扎,我想这是一个将在 9 月份解决的错误,我已经在反馈助手上提交了它,请确保这样做!

现在,您只需创建一个新的 UIHostingController 来包装您想要以模态方式显示的 SwiftUI 视图。我知道它看起来很老套,但至少它有效:

import SwiftUI

struct OtherView: View {
    @State var otherViewState: String = ""

    var body: some View {
        TextField($otherViewState, placeholder: Text("Demo Text Input"))
    }
}

struct Demo: View {
    var body: some View {
        Button("Toggle Modal") {
            self.showModal()
        }
    }

    func showModal() {
        let window = UIApplication.shared.windows.first
        window?.rootViewController?.present(UIHostingController(rootView: OtherView()), animated: true)
    }
}

您可能想改进获取窗口的方式,特别是如果您支持多个窗口,但我认为您已经明白了。

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

SwiftUI:清除模态状态或重新初始化 的相关文章

随机推荐

  • Firebase - 如何一次删除多个条目?

    我该如何删除all给定推送 ID 的条目 例如 假设KoxoxwTqfb50E1Gvi9F推送 ID 位于我的数据库的许多位置 即在许多键下 我想删除所有条目KoxoxwTqfb50E1Gvi9F立即而不是静态删除所有条目 因为我知道它们的
  • 如何在 useEffect 中使用 setState 进行 API 调用后执行函数?

    我是一个 React 新手 学习了 30 个小时 有一些基本的 Javascript 背景 现在我正在学习一门课程 并试图 离开 这条路 但我很好奇如何实现我的预期目标 有一个 Memegenerator 它在渲染开始时从 API 获取所有
  • Magento 中不允许序列化?

    当我在 Magento 中打开缓存时 出现以下异常 不允许序列化 Mage Core Model Layout Element 异常发生在app code core Mage Page Block Template Links php 在线
  • 使用 Python 放置 PMML

    我有一个简单的PMML http en wikipedia org wiki Predictive Model Markup Language我想要的文件PUT到评分服务器 这里是curl call curl X PUT data bina
  • 如何使用 kubectl cmd 获取 git commit sha1?

    如何使用 kubectl 命令获取特定 pod 的提交 sha1 例如 kubectl get git commit sha1 pod name 目前还没有办法使用 kubectl 来实现你想要的 他们唯一可能的方法是如果你的 docker
  • 在 matplotlib 中向日期格式的时间序列添加垂直线

    我正在尝试向时间序列图中添加一条红色垂直线 其中 x 轴格式为 Y m d 我想添加该行的日期是 2013 年 5 月 14 日 只需在 plt show 之前添加一行 plt axvline x 2013 05 14 or plt axv
  • 如何在 C# 中对文件进行哈希处理

    如何使用 C 对文件进行哈希处理 有什么可用的 md5 crc sha1 等 是否有我应该继承的接口 我想对多个文件进行校验和并将其存储在数据库中 并使用我自己的两个校验和 哈希 1 如何使用 C 对文件进行哈希处理 您可以使用 NET 类
  • Rollup:从外部模块捆绑/嵌入 wasm 代码

    使用 rollup 我尝试捆绑一个 typescript 库 该库导入并调用包含 wasm 文件的 npm 模块 只有生成的包不包含 wasm 文件内容的痕迹 我怎样才能强制它捆绑网络程序集 这是我尝试过的关键文件 typescript s
  • 深度查找或搜索 JSON 中任何级别的键并替换其在 C# 中的值

    我也被一个问题所困扰 我能够将嵌套的 JSON 转换为 key Value 但现在我想将其转换回原来的 json 格式 由于我的问题 我无法使用 C 对象模型来执行此操作 因为我拥有的 JSON 文件是动态的 并且其结构会随着时间的推移而变
  • Ruby Webrick HTTP 身份验证

    我怎样才能做同样的身份验证工作这一页 http microjet ath cx webrickguide html HTTP Authentication html使用这样的子类 class Configuration lt HTTPSer
  • 为什么 std::iterator 被弃用?

    模板类std iterator http en cppreference com w cpp iterator iterator在 C 17 中已被弃用 为什么这样 这是一个方便的方法来确保std iterator traits http
  • d3.js v4,如何在鼠标悬停时有一条线跟随鼠标,同时也有一个圆圈跟随路径?

    这是我的 js 小提琴 https jsfiddle net DerNalia 3wzLv9yg 1 https jsfiddle net DerNalia 3wzLv9yg 1 我一直在尝试从这里解释代码 带有鼠标悬停工具提示的多系列折线
  • Bootstrap打印CSS去除背景颜色

    当我使用引导程序时 当我尝试打印页面时 它会从所有内容中删除背景颜色 我网站上的几乎所有内容都使用引导类 因此我想避免在引导程序之外使用大量手动 CSS 我发现 bootstrap 使用 media print删除背景颜色 我也使用引导主题
  • std::integral_constant 的否定

    抱歉问了这么简单的问题 但我无法轻松找到答案 谷歌没有说任何关于 C 否定积分常量 和类似查询的有趣内容 C 11 中是否有任何特征使得std true type from std false type反之亦然 换句话说 我想要一些更具可读
  • 使用模拟获取所有日志输出

    我想用模拟获取所有日志输出 我搜索过 但是 只找到了显式模拟logging info或logging warn的方法 我需要所有输出 无论设置的日志记录级别如何 def test foo def my log logs append wit
  • Nginx 重定向到错误的虚拟主机

    我的一个 nginx conf 文件中有大约 1300 个虚拟主机 所有这些都具有以下布局 它们在虚拟主机文件中依次列出 现在我的问题是有时我的浏览器将 site2 重定向到 site1 由于某种原因 域名不匹配 看起来 nginx 总是重
  • 如何使用 Python IMAP 从 Gmail 邮件中删除“来自无人”和“内容类型”?

    尽管我在从很多网站进行大量搜索后完成了大部分工作 但我仍然无法获得我想要的正确输出 Code import imaplib import smtplib import email mail imaplib IMAP4 SSL imap gm
  • 使用自定义任务工厂创建但不启动任务?

    我希望能够在不启动任务的情况下创建任务 类似于运行var a new Task a Start 但有一家定制工厂 工厂提供StartNew 但我找不到分离这两个动作的方法 这可能吗 A TaskFactory基本上是两组默认选项 创建和继续
  • 保存 H2o 数据帧

    我正在使用 10GB 的训练数据框 我使用 H2o 库来加快计算速度 每次加载数据集时 我都应该将数据帧转换为 H2o 对象 这需要花费很多时间 有没有办法存储转换后的 H2o 对象 这样我每次在构建模型时都可以跳过 as H2o trai
  • SwiftUI:清除模态状态或重新初始化

    我有一个 SwiftUI 模式 我想清除其状态或重新初始化 考虑到此模式可以打开可能具有某种状态的其他模式 重新初始化将是首选 这是一个简单的例子 import SwiftUI struct OtherView View State var