首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

点击按钮显示模态视图后,再次关闭它时,模态视图会消失的原因是因为按钮点击事件触发了视图状态的改变,导致模态视图的显示与隐藏发生了变化。

在SwiftUI中,视图状态是由@State属性包装器来管理的。当按钮被点击时,按钮的点击事件会改变@State属性的值,从而触发视图的重新渲染。在模态视图显示时,@State属性的值被设置为true,从而显示模态视图;当再次点击按钮关闭模态视图时,@State属性的值被设置为false,导致模态视图消失。

要解决这个问题,可以使用@Binding属性包装器来将模态视图的显示状态与按钮的点击事件进行绑定。首先,在父视图中创建一个@State属性来管理模态视图的显示状态,并将其作为@Binding参数传递给子视图。然后,将按钮的点击事件改为修改@Binding属性的值。这样,在点击按钮时,按钮事件改变了@Binding属性的值,从而触发视图的重新渲染,但模态视图的显示状态仍然保持不变。

以下是示例代码:

代码语言:txt
复制
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,从而关闭模态视图。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析 SwiftUI 两处由状态更新滞后引发的严重 Bug

众所周知,SwiftUI一个响应式框架,这意味着,当数据源发生变化时,框架自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...原文发表我的博客 肘子的Swift记事本视图变化在前、状态变化在后 SwiftUI ,某些可编程控件执行一定的操作先更新视图,待视图变化完成后再修改与其对应的状态。...的复现条件非常简单:真机上测试( 模拟器上不容易复现 )点击 “GO” 按钮进入下一层视图点击 “Show Sheet” 按钮弹出 Sheet通过下滑手势取消 Sheet Sheet 取消后(动画结束...再次执行上述过程,您会发现在返回上层视图后,应用并不会锁死,一切都恢复了正常。然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好的选择,特别是没有屏蔽手势取消 Sheet 的情况下。...的复现条件如下:iOS 16 系统,真机或模拟器上测试点击视图列表按钮,可以进入下一级视图。

635110

解析 SwiftUI 两处由状态更新滞后引发的严重 Bug

众所周知,SwiftUI一个响应式框架,这意味着,当数据源发生变化时,框架自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死 这是一个 SwiftUI 所有版本存在的错误,你可以众多的论坛或聊天室里看到不少的开发者都在寻找解决方法。...的代码后,我们不再使用手势来取消 Sheet,而是通过点击 “Dismiss” 按钮来实现这一操作。...的复现条件如下: iOS 16 系统,真机或模拟器上测试 点击视图列表按钮,可以进入下一级视图。...因此,当我们首先更新状态,然后 SwiftUI 再响应该状态的变化(返回上层视图),即使此时对 AG 进行清理,仍将可以保证 AttributeGraph 的完整性,应用自然不会出现问题。

30420

AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

构建并运行查看的外观。 您可以看到视频播放器显示了一组基本控件。 这包括一个播放按钮一个静音按钮和用于前进和后退的 15 秒跳过按钮。 2....play() 默认情况下,这会将您的循环剪辑显示设置为自动播放和音频关闭。 构建并运行查看您的完整工作剪辑节目! 不幸的是,当最后一个剪辑播放完毕后,视频播放器变黑。 3....看起来您必须手动方式做事。 您需要做的就是跟踪您的播放器和当前播放的项目。 当到达最后一个视频,您将再次将所有剪辑添加到队列。...() } 构建并运行,然后点击列表项之一打开全屏播放器。...您会在左上角看到画中画按钮……否则不会! 缺点是,撰写本文,iOS 14.5是可用的最新版本,VideoPlayer 的 SwiftUI 视图未显示画中画按钮

6.9K10

Xcode 11 初体验

使用 Focus Mode 专注使用一个窗口。 综合这个功能还是不错的,我经常也会打开多个页面!来回进去出来麻烦! 直接点击这个按钮横向进行分割。...按住 Option 按键点击纵向分割, 下图是一个分割后的界面示例 上图中界面被分成了 3 个编辑窗口。左边被上下分割成了两个小窗口,右边被单独分割出一个大窗口。...当你的项目关联了版本控制工具,比如 Git, Xcode 检测出当前文件哪些地方相对于上次递交的版本有更改,并且会通过左边显示一个蓝色线条标记出来: Change Bar 点击左键还可以选择 show...我下面给大家开始演示 打开项目文件,然后找到 Swift Packages 选项卡: 点击添加要导入的第三方框架,这里 RxSwift 为 点击 Next 执行验证,稍等片刻就会让你选择版本以及分支...Stash Changes 选择 Stash Changes 选项,自动弹出一个对话框,提示我们输入一些Comment 信息。点击Stash 按钮自动跳转到Git管理Tab 下。

3.2K10

架构之路 (五) —— VIPER架构模式(一)

开始 首先看下主要内容: 本教程,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...本例,主要的entity是Trip,包含一个路点Waypoints列表,路点是旅程的各个站点。 这个应用程序包含一个DataModel类,包含一个旅行列表。...当将用户操作发送回数据模型,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新的旅程。...当您将其放置NavigationView,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。...使用presenter向列表添加新路径点的add按钮一个列表List,使用ForEach与presenter为每个路点创建一个单元格。

17.4K10

更新MacOS BigSur是遇到的常见问题及解决方案

启动按住Shift键,安全模式重启Mac。然后尝试重新安装 Big Sur。 重置NVRAM。关闭您的Mac。在按住Cmd + Option + P + R的情况下引导。...当macOS Big Sur设置失败,该怎么办: 按住电源按钮强制Mac关闭再次按电源按钮将其启动。现在应该启动到Big Sur。...检查电源-这听起来很简单,但这就是为什么位于列表顶部。如果您使用的是笔记本电脑,请将其插入充电器。如果已经插入,请确保墙上和Mac上的连接都牢固。如果使用台式机Mac,请确保电源线牢固。...如果您使用的是Mac mini或Mac Pro,或者将笔记本电脑连接到外部显示器且盖子关闭,请确保不是问题所在。检查连接。尝试显示关闭的情况下重新启动,然后启动过程中将其打开。...单击系统报告,然后选择控制器。如果您的Mac具有Apple T2安全芯片,则右侧将有一个“ Apple T2芯片”。 使用T2芯片的Mac上重置SMC 关闭您的Mac。

5.4K20

面向所有人的 UI 编程 :透过点按弹窗初尝 SwiftUI

在手机应用,软件开发者会使用不同的技术来实现界面的显示,流行的界面语言比如 Flutter,就是闲鱼应用的交互界面语言。...本文我将用如下图中的一个例子来展示如何设置点按弹窗。下图中程序的功能很简单:长按这句名言后,会出现点按弹窗,你可以点击复制按钮将这句话复制到系统剪贴板。 ? 试想你是一名美术,完全不了解程序。...其中 View 表示一个视图,比如我们在手机上看到的一个滑条,一张图片,一个列表等种种,都叫做视图;而 Modifier 则是修饰器,的作用是为视图增加功能,比如圆角,动画,阴影,边际,背景等等。...现在我们来观察上述代码的结构,你会发现整段代码由一个名叫 VStack 的视图和众多 Modifier 组成。 ? 那么 VStack 是什么呢?的里面为什么包着两个 Text 呢?...在按钮我们需要设置两个点:按钮的动作,也就是 action,里面的两行代码会将名言文字复制到剪贴板;另一个点是下面的 HStack ,表示一个水平排列的 View。

2.1K40

对话框、模态框和弹出框看起来很相似,它们有何不同?

作为一名长期合同工,我经常改变工作环境——当我不同的团队、公司、国家工作,措辞都会不同。词语的含义随着时间而改变,整个世界都是这样……这很正常!...然后我们将讨论在网页或网络程序同时使用这些特征我们会得到什么:对话框、弹出窗口、覆盖物和揭示框。希望当我们首先详细讨论特性,更容易区分组件本身。...当内容可以折叠,键盘用户应该能够使用与鼠标用户点击折叠内容的按钮相同的按钮。 主要模式我们看看一些常见的模式以及如何区分它们。...CMS 界面,发布按钮变暗,右下角有一个绿色框,上面写着“文档已发布”,该框右侧有一个带有关闭图标的按钮 图片 几秒钟后自动消失的“Toast”通知,还有一个关闭按钮,以防您希望现在消失(大多数Toast...如果存在多个按钮,可能是其中最不破坏性的一个,例如如果有“取消”和“确认”按钮一个合理的默认选项可能是“取消”。 当模式对话框关闭:如果用户触发,将焦点移回触发器。

3.5K00

如何结合 Core Data 和 SwiftUI

为了进行试用,请点击 “Add Entity” 按钮创建一个新实体,然后双击其名称将其重命名为 “Student”。...如果我们对 Core Data 说“这不是必须的”(您可以模型编辑器完成),仍然会生成可选的 Swift 属性,因为所有 Core Data 关心的是属性保存具有值——在其他时间它们可以为 nil...为了解决这个问题,我们将在列表下方创建一个按钮,每次点击都会添加一个新的随机学生,但是首先我们需要一个新属性来存储托管对象上下文。 让我重申一下,因为这很重要。...当我们定义 “Student” 实体,实际上发生的是 Core Data 为我们创建了一个类,该类继承自其自身的一个类:NSManagedObject。...这是一个引发函数的调用,因为理论上它可能失败。实际上,我们所做的一切都没有失败的可能,因此我们可以使用try?来调用它——–我们不在乎捕获错误。 因此,请将最后一行添加到按钮的操作: try?

11.8K30

【说站】win10系统打开网页不是私密连接怎么解决?

如果您安装了此扩展程序,我们强烈建议您将其禁用或删除,并检查是否可以解决问题。...2、当“设置”选项卡打开,一直向下滚动并单击“显示高级设置”。 3、“隐私”部分,单击“清除浏览数据”按钮。 4、“从以下菜单清除以下项目”,选择时间的开始。...这很简单,您可以按照以下步骤操作: 1、打开设置选项卡,然后单击显示高级设置。 2、一直向下滚动,然后“重置设置”部分,单击“重置设置”按钮。 3、现在将出现一个确认对话框。...从结果列表中选择。 2、当“网络和共享中心”打开,单击左窗格的“更改高级共享设置”。 3、现在将显示“高级共享设置”窗口。关闭网络发现,文件和打印机共享以及公用文件夹共享。打开密码保护的共享。...点击保存更改按钮。 4、之后,请尝试再次访问该网站,并检查是否会出现错误消息。 方法十一:检查您的带宽限制 如果您使用的网络连接有每月限制,则可能要检查网络使用情况。

10.4K20

AutoJs6 – v6.2.0 – 卓 JavaScript 自动化工具 (Auto.js 二次开发)

修复 关于页面功能按钮文本长度过大导致文本显示不完全的问题 修复 主页抽屉设置项标题长度过大导致文本与按钮重叠的问题 修复 主页抽屉权限开关在提示消息对话框消失后可能出现状态未同步的问题 修复...Root 权限修改主页抽屉权限开关失败未继续弹出 ADB 工具对话框的问题 修复 Root 权限显示指针位置初次使用时提示无权限的问题 修复 图标选择页面的图标元素排版异常 修复 文本编辑器启动可能因夜间模式设置导致闪屏的问题...布局层次分析时长按列表项可能导致弹出菜单溢出下方屏幕的问题 修复 卓 7.x 系统夜间模式关闭导航栏按钮难以辨识的问题 修复 http.post 等方法可能出现的请求未关闭异常 修复 colors.toString...方法 Alpha 通道为 0 其通道信息结果丢失的问题 优化 重定向 Auto.js 4.x 版本的公有类实现尽可能的向下兼容 (程度有限) 优化 合并全部项目模块避免可能的循环引用等问题...(悬浮窗跟随应用主题, 快速设置面板跟随系统主题) 优化 布局控件信息列表按可能的使用频率重新排序 优化 布局控件信息点击复制根据选择器类型自动优化输出格式 优化 使用悬浮窗选择文件按返回键可返回至上级目录而非直接关闭悬浮窗

4.4K20

树莓派使用Android系统

点击 "选择目标 "按钮,选择SD卡。如果只插入了一个可写设备,Etcher软件自动选择。 3. 最后,点击 "Flash!"按钮,开始将镜像写入SD卡。...7. 7.滚动到底部,找到 "开发者选项",然后点击。 8. 有两个不同的选项,我们需要在这个页面中进行配置。首先,向下滚动,直到你看到 "Root access",然后点击。 9....取而代之的是,使用一个特殊的bash脚本来重命名分区,以便可以恢复模式下启动和退出。 1. 首先,需要回到卓界面的应用库。同样,可以通过从屏幕底部向上拖动来实现。 2....指定你要使用的语言(1。默认情况下,设置为英语。选择好后,点击 "START "按钮开始设置过程。 2. 由于是第一次启动安装了谷歌应用和卓系统的Raspberry Pi,所以检查和安装更新。...现在可以打开和关闭某些谷歌服务。配置好每个服务后,滚动到底部,然后点击 "接受 "按钮。 7. 在此页面上,可以配置您的设备需要使用密码。为了简单起见,继续本教程,选择 "不是现在 "选项。

15.1K20

TCA - SwiftUI 的救星?(一)

): 用户 view 上的操作 (比如按下某个按钮),将会消息的方式进行发送。...另外,当我们有更多更复杂的 Reducer 我们也可以选择只某个或某几个 Reducer 上调用 .debug() 来帮助调试。...当我们 View 之间自上向下传递数据,尽量保证把 Store 进行细分,就能保证模块之间互不干扰。...但是,实际上使用 TCA 做项目,更多的情景我们从更小的模块进行构建 (它会包含自己的一套 Feature),然后再把这些本地内容”添加“到的上级。所以 Store 的切分将会变得自然而然。...为数据文本添加颜色 为了更好地看清数字的正负,请为数字加上颜色[13]:正数用绿色显示,负数用红色显示。 添加一个 Reset 按钮 除了加和减以外,添加一个重置按钮,按下后将数字复原为 0。

3.2K30

Windows 11 及其卓子系统折腾记

1、第一回合:尝试安装亚马逊应用商店 链接一:http://aka.ms/AmazonAppstore 浏览器打开上面的 “链接一”,提示跳转到应用商店: 应用商店打开了亚马逊应用商店,但是显示当前不可用...由于当前是正式版,需要切换为预览版才行,也就是加入 “Windows 预览体验计划”: 选择 Beta 渠道(本次卓子系统仅支持这个渠道): 然后使用系统更新,更新到了 22000.282: 再次点击链接二并跳转到商店...,终于可以安装了: 下载: 启动: 启动后仅仅是打开了设置界面: 点击 “文件” 区域右上角的按钮,开始启动卓子系统,不过弹出了错误弹窗,要求开启虚拟化(一个是启用虚拟机平台,一个 BIOS...勾上 “虚拟机平台” 然后点击确定: 应用完需要重启一下: 重启后点击启动卓子系统应用(安装好后点击固定到开始屏幕的): 在打开的设置界面,再次点击文件栏的弹出按钮显示正在启动子系统: 原来真的是一个文件管理应用啊...附 1:如果子系统卡住了,可以设置界面点击关闭按钮: 附 2:Windows 11 桌面(主题:日出)

3.2K10

Swift入门:怎样安装Xcode和创建Playground

Swift 2.2是对swift2.0的一个小的更新,Swift 3删除一些语法之前,已经将那些语法设置为废弃使用。...本教程的示例肯定会更有意义… 安装了Xcode?好啊!让我们开始吧… Swift Playground 简介 启动Xcode,您将看到如下所示的内容。...寻找左下角的“Get started with a playground”按钮然后点击。 ?...代码左侧窗格,您将编辑此代码,以便在我们开始快速完成您自己的工作。结果显示右侧窗格,它将显示您的Swift代码所做的工作。...这通常用于注释:您在代码写入的注释,帮助您理解它以后的作用。 当你输入的时候,Playground可能自动运行代码并显示更新的结果。

6.2K10

酷我音乐iOS小组件适配开发实践

如果通过点击widget的动作打开app这个过程我们通俗点叫拉端 就是点击widget后会产生直接把app调用起来的效果,有些开发者喜欢叫呼起app.都一个意思,以下简称拉端操作 我们之前都了解...从遇到问题和解决问题开始 当我们第一次新建widget的target 然后打开后, xcode自动生成相关不同大小的小组件,也伴随着自动生成的相关代码.如果第一次不了解小组件工作原理可以参考官方的WWDC...经过上述操作后,我们只能给小组件加一个按钮,并不能实现点击按钮触发事件,当我们点击button的时候直接拉端,根本不给我们处理这个按钮点击机会. 这是因为小组件不支持常规按钮....Shortcuts 和 Spotlight使用此意图.只能用于一个带有Intent的按钮. 5.widgetURL和Link跳转app问题 当我们点击某些View的时候需要跳转host app,小组件的...-> some View } 明确标识如果并排添加多个widgetURL的话,这种行为是未定义不确定的,默认最后一个添加的为准.好坑呀!

71210

酷我音乐iOS小组件适配开发实践

如果通过点击widget的动作打开app这个过程我们通俗点叫拉端 就是点击widget后会产生直接把app调用起来的效果,有些开发者喜欢叫呼起app.都一个意思,以下简称拉端操作 我们之前都了解...从遇到问题和解决问题开始 当我们第一次新建widget的target 然后打开后, xcode自动生成相关不同大小的小组件,也伴随着自动生成的相关代码.如果第一次不了解小组件工作原理可以参考官方的WWDC...经过上述操作后,我们只能给小组件加一个按钮,并不能实现点击按钮触发事件,当我们点击button的时候直接拉端,根本不给我们处理这个按钮点击机会. 这是因为小组件不支持常规按钮....Shortcuts 和 Spotlight使用此意图.只能用于一个带有Intent的按钮. 5.widgetURL和Link跳转app问题 当我们点击某些View的时候需要跳转host app,小组件的...-> some View } 明确标识如果并排添加多个widgetURL的话,这种行为是未定义不确定的,默认最后一个添加的为准.好坑呀!

96430

Jump Start Bootstrap 第4章

我们将会看到如何添加下拉菜单到导航栏、切换按钮的状态、当点击按钮漂亮的警告信息会在显示一段时间后消失等等功能。...现在,我们有了一个简单的下拉菜单,单击链接显示菜单。我们可以浏览器查看,如图所示。 ? 让我们结合使用下拉式插件和我们在前一章创建的标签和按钮菜单。...为了产生一个可解除的警告消息,我们需要给警告消息添加一个类”alter-dismissable”;然后我们需要一个按钮点击关闭警告消息;这个按钮需要有一个data-dismiss属性,用来告诉Bootstrap... 在这代码,我使用类btn、btn-lg、btn-default创建了一个大的灰色按钮正好处于inactive状态,当我们点击,Bootstrap将在按钮上添加类active。...不久,我们将看到如何通过modal-dialog添加一些额外的类来更改模式的大小。模式对话框我们将创建一个包裹体元素,装了一个模式对话框的各个子部分。

28.3K40

【新!超详细】Figma组件属性完全指南

过去,我们必须为每个选项创建一个变体。使用组件属性,我们可以组件内构建逻辑,为我们提供相同的选项,但变体更少。 为什么使用组件属性?...使用组件属性的主要原因是减少了我们需要为每个组件创建的变体数量涵盖所有可能性。例如,我创建了一个具有三种类型的按钮:主要、次要和再次级。每个都有 4 种状态:启用、悬停、聚焦和禁用。...指定图层名称,然后值输入字段中指定一个值,例如:“按钮” 布尔属性 选择一个图层,然后图层部分,单击图标添加布尔属性。给它一个名称,例如“显示图标”,并将其设置为 true 或 false。...单击详细信息图标,然后在窗口中更改名称。 更改列表的变体顺序 当您单击一个实例并想要更改变体,您希望按字母顺序排列,或者最流行的变体顶部。 变体行上,单击详细信息图标。...属性列表 如果您有一个具有布尔值和另一个属性的组件,请对属性列表进行排序,布尔值位于顶部,然后是其他属性。当您将布尔值切换为关闭,另一个属性消失并且列表移动。

11.4K22
领券