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

SwiftUI:当取消当前工作表时,.sheet()不会转到包含预期数据的上一个视图

SwiftUI是一种用于构建用户界面的现代化框架,它是苹果公司推出的一种声明式UI编程范式。在SwiftUI中,.sheet()是一个用于在当前视图上显示模态视图的修饰符。当取消当前工作表时,.sheet()不会转到包含预期数据的上一个视图,这可能是因为在取消工作表时没有正确处理数据传递或状态管理。

为了解决这个问题,可以采取以下步骤:

  1. 确保在工作表视图中正确处理数据传递。可以使用@Binding或@StateObject属性包装器来管理数据的传递和状态变化。
  2. 在取消工作表时,手动更新父视图中的数据或状态。可以通过在工作表视图中使用回调闭包或使用Combine框架中的发布者和订阅者模式来实现。
  3. 检查工作表视图是否正确绑定到父视图中的数据。确保使用正确的绑定方式,以便在取消工作表时更新父视图。
  4. 如果问题仍然存在,可以尝试使用其他的模态视图展示方式,例如使用全屏模态视图或自定义转场动画来实现预期的数据传递和状态管理。

腾讯云相关产品中,可以使用云函数(Serverless Cloud Function)来处理数据传递和状态管理,通过云函数可以在取消工作表时触发相应的逻辑处理。具体产品介绍和使用方法可以参考腾讯云函数的官方文档:腾讯云函数

请注意,以上答案仅供参考,具体解决方案可能因具体情况而异。

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

相关·内容

一段因 @State 注入机制所产生“灵异代码”

,在 Text 中不包含 n 情况下,即使 n 值改变,StateTest 视图 body 也不会重新计算。...stateTest_2023-02-22_16.44.55.2023-02-22 16_47_35通过观察加载后视图 State 源数据,我们可以看到,State 包含一个 _wasRead 私有属性...中视图已完成创建 dump(_n) }}Sheet 视图上下文 SwiftUI 创建并显示一个 Sheet 视图,并非在现有的视图树上创建分支,而是新建一棵独立视图树。...现象分析根据上文中介绍内容,我们对本文代码奇怪现象进行一个完整梳理: ContextView 中不包含 Text( ContextView 没有与 n 创建关联 )程序运行,SwiftUI 对...Sheet Text 显示 n = 1点击 Sheet Close 按钮,执行 Button 闭包,重新获得 n 的当前值( n = 2 ),打印值为 2 ContextView 中包含

1.9K20

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

众所周知,SwiftUI 是一个响应式框架,这意味着,数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...这些控件基本上都是对 UIkit(AppKit)二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet ,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...它复现条件非常简单:在真机上测试( 模拟器上不容易复现 )点击 “GO” 按钮进入下一层视图点击 “Show Sheet” 按钮弹出 Sheet通过下滑手势取消 SheetSheet 取消后(动画结束...再次执行上述过程,您会发现在返回上层视图后,应用并不会锁死,一切都恢复了正常。然而,明显地,强迫用户点击 “Dismiss” 按钮并不是一个好选择,特别是在没有屏蔽手势取消 Sheet 情况下。...AttributeGraph 是 SwiftUI 用于维护众多数据源与视图之间依赖关系工具。

603110

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

众所周知,SwiftUI 是一个响应式框架,这意味着,数据源发生变化时,框架会自动更新视图。同样,当我们想调整视图显示,应直接对状态进行修改。...这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及在滚动中返回上层视图导致应用崩溃。...Sheet 执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet ,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...视图正在滚动返回上一层视图会导致应用崩溃 这是一个由 xiaogd 在我 Discord 论坛中提出 问题[3]。...AttributeGraph 是 SwiftUI 用于维护众多数据源与视图之间依赖关系工具。

28320

SheetKit——SwiftUI模态视图扩展库

SheetKit——SwiftUI模态视图扩展库 新写了个SwiftUI Sheet扩展库,添加对可变高度Sheet支持。...提供了数个用于模态视图便捷展示、取消方法,以及几个用于模态视图View Extension。...开发SheetKit主要原因: •便于Deep link调用SwiftUI提供了onOpenURL方法让应用程序可以非常轻松响应Deep Link。但在实际使用中,情况并不如预期。...•模态视图集中管理SwiftUI通常采用.sheet来创建模态视图,对于简单应用来说,这种形式非常直观,但如果应用程序逻辑比较复杂、需要模态视图众多,则上述方式就会让代码显得十分混乱,不易整理。...interactiveDismissDisabled SwiftUI 3.0interactiveDismissDisabled加强版,在通过代码控制是否允许手势取消基础上,增加了当用户使用手势取消可以获得通知能力

2.9K20

如何在SwiftUI中实现interactiveDismissDisabled

需求 由于健康笔记[2]中数据录入都是在Sheet中进行,为了防止用户在录入过程中由于误操作(使用手势取消Sheet)丢失数据,因此,从最初版本开始,我就一直使用各种手段加强对Sheet控制。...去年9月,我在文章【在SwiftUI中制作可以控制取消手势Sheet】[3]中介绍了健康笔记2.0[4]版本Sheet控制实现方法。...目标为: •通过代码控制是否允许手势取消Sheet•在用户使用手势取消Sheet可以获得通知,进而拥有更多控制能力 最终实现效果如下: dismissSheet 当用户有未保存数据,通过手势取消...尽管interactiveDismissDisabled实现很优雅,但仍未完成健康笔记[7]需要第二个功能:在用户使用手势取消Sheet可以获得通知,进而拥有更多控制能力。...delegate = delegate } }} makeUIView中只需要创建一个空视图(UIView),由于在执行makeUIView,无法保证Sheet视图已经被正常展示

3.8K40

StateObject 与 ObservedObject

被订阅可观察对象通过内置 Publisher 发送数据( 通过 @Published 或直接调用其 objectWillChange.send 方法 ),StateObject 和 ObservedObject...ObservedObject 和 StateObject 两者都保存了视图与可观察对象订阅关系,在视图存续期内,它们都不会主动取消这个订阅,但 ObservedObject 无法确保可观察对象是否会由于被销毁而提前取消订阅...{ Text("Hello \(store.username)") }} SwiftUI 开始创建以该描述生成视图,大致会进行如下步骤:创建一个 DemoView 实例进行与该视图有关一些准备工作...视图加载到视图SwiftUI 会根据当时采用实例将需要绑定状态( @State、@StateObject、onReceive 等 )托管到 SwiftUI 托管数据池中,之后无论实例再被创建多少次...在 SwiftUI视图添加到视图树上,调用 _makeProperty 方法将需要持有的订阅关系、强引用等信息保存到 SwiftUI 内部数据池中。

2.4K20

Ask Apple 2022 与 SwiftUI 有关问答(下)

创建从底部开始滚动视图Q:我如何实现一个在底部对齐滚动视图,在 macOS 上会不会有糟糕性能?...但是,此转换仅在文本字段完成编辑才会发生,并且不会阻止输入非数字字符。目前 SwiftUI 没有 API 可以限制用户在字段中输入字符。...视图结构过于复杂,除了难以阅读外,还会出现无法使用代码自动补全以及上文提到无法编译( too complex to type check )情况。...A:解决办法:保留 TextField ,但它不能被编辑,有条件地设置 disabled(true),它可以编辑使用 disabled(false) 。...,但原因并非来自实际视图内容,而是由于 sheet、toolbar 等修饰器中代码造成

14.7K30

SwiftUI TextField 进阶 —— 事件、焦点、键盘

视图中有多个 TextField ,通过 onSubmit 和 FocusState(下文介绍)结合,可以给用户带来非常好使用体验。...接受到SubmitTriggers值不包含在 onSubmit 设置SubmitTriggers,传递将终止。...在 SwiftUI 3.0 中,苹果为开发者提供了一个远好于预期解决方案,同 onSubmit 类似,可以从更高视图层次来统一对视图 TextField 进行焦点判断和管理。...(例如辅助键盘视图)或者快捷键,我们也可以让焦点向前改变或者跳转到其他特定 TextField 上。...使用快捷键获得焦点 一个视图中有多个 TextField(包括 SecureField),我们可以直接使用Tab键按顺序在 TextField 中切换焦点,但 SwiftUI 并没有直接提供使用快捷键让某个

13.1K10

SwiftUI 与 Core Data —— 安全地响应数据

开发者在模型编辑器中为属性设置了默认值( 取消可选 ),在 Xcode 自动生成托管对象类定义代码中仍会将不少类型声明为可选值类型。通过手动修改类型( 将 String?...在上节演示中,数据被删除后( 通过 onAppear 闭包中延迟操作 ),NavigationView 会自动返回到根视图中。在这种情况下,持有该数据视图将伴随着数据删除一并消失。...此时,数据被删除后,应用并不会自动退回至根视图。另外,在其他一些操作中,为了保证模态视图稳定,我们通常也会将模态视图挂载到 List 外面。例如:@State var item: Item?....now).timeIntervalSince1970)") }}运行上面的代码,在数据被删除后,Sheet 视图 item 会因 managedObjectContext 为 nil 而使用备选数据...任何可能脱离视图传递过程都应使用托管对象实例对应值类型版本。在更改数据进行二次确认为了避免对主线程造成过多影响,我们通常会在私有上下文中进行会对数据产生变化操作。

3.3K20

SwiftUI 动画机制

SwiftUI 中,我们不能命令某个视图从一个位置移动到另一个位置,为了实现上述效果,我们需要声明该视图在状态 A 所处位置以及状态 B 所处位置,由状态由 A 转到 B SwiftUI...细心朋友可能会发现,在上文中,对时序曲线函数进行关联,我使用词语是“依赖项”而不是“状态”,这是因为视图状态是它拥有的全部依赖项总体呈现。...appendWithAnimation 中使用了 withAnimation ,但由于 withAnimation闭包中没有包含特定依赖项,因此并不会激活 SwiftUI 动画机制。...比如,在出场动画进行中,将状态 show 恢复成 true ,SwiftUI 将会保留当前分支状态(不会重新创建视图,参见本文附带范例)。...因此有很大可能因为对视图识别错误,而产生动画异常。下面的动图中,出现相同元素SwiftUI 给出了警告提示。

14.6K40

SwiftUI 视图生命周期研究

包含了 app 生命周期中可能会出现在屏幕上所有符合 View 协议类型(即使可能永远不会被渲染)。...•在 SwiftUI 生成视图值树发现没有对应实例SwiftUI 会创建一个实例从而获取它 body 结果。...除了必要参数设置外,不要做任何多余操作。这样即使 SwiftUI 创建了多余实例,也不会加大系统负担。 注册数据依赖 在 SwiftUI 中,状态(或者说是数据)是驱动 UI 动力。...通常情况下,SwiftUI 在需要渲染屏幕某个区域或需要该区域数据配合布局,会在视图值树上创建对应视图不再需要其参与布局或渲染视图将被销毁。...更确切表述应该是,视图销毁,将向 task 修饰器中闭包发送任务取消信号。至于是否取消,仍由 task 中闭包自己决定。

4.3K30

老人新兵 —— 一款 iOS APP 开发手记

SwiftUI 和 Combine Bug 太多尽管做好新产品并不完善准备,不过 bug 数量还是远远多于我预期。...,不过就不优美了;切换页面 view 会重置状态,比如说 view1 里有个 ScrollView, 你已经进行了滚动,当你通过 TabView 切换到其他视图后切换回来,ScrollView 不会保留在原来地方...一个 view 中有基于 ForEach 动态变化数据,如果该 view 在 sheet 中,数据变化后会导致触发异常,如果将 view 从 Sheet 中提取出来直接显示则无此问题。...SwiftUI多数控件都是采用 bind 方式来响应及传递数据,设计起来思路会很清晰,不过执行起来会有粘滞感。复杂 Sheet 会尤其明显。所有基于异步设计响应都会有延时。...由于有了 RelationShip,多数情况下无需自己设计主键,这是一个极大便利,但需要将数据库手动导出备份却出现了问题。你无法使用系统内置主键或 ObjectID。

2.5K40

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

如果您现在构建并运行,您将不会看到任何有趣东西。 然而,在本教程结束,您将拥有一个功能齐全道路旅行计划应用程序。 ---- What is VIPER?...这种分离来自“Uncle”Bob MartinClean Architecture paradigm。 您查看图表,您可以看到数据视图view和实体entities之间流动完整路径。...它值被分配给这个类自己trips集合,创建一个链接,数据模型改变,保持presentertrips更新。...将用户操作发送回数据模型,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新旅程。...您将其放置在NavigationView中,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图

17.4K10

Ask Apple 2022 与 SwiftUI 有关问答(上)

对于苹果工程师给予建议有一点请注意,那就是如果有在父视图中修改该环境对象实例需求,须确保父视图不会被反复重构( SwiftUI 重新创建视图类型实例 )。...最近,我注意到 SwiftUI 视图 onAppear 在意想不到时间启动,比如 UITabBarController 被创建,而不是视图本身出现时。...2、视图出现在 UITabBarController 中,推荐执行代码方法是什么?...如何改善一个包含大量 UITextField 视图效率Q:我有一个包含 132 个 UITextField SwiftUI 视图。我知道这个数量很大,但这是由业务逻辑决定。...使用它们应该只创建一个实例,然后可以在子视图中读取。这应该不会增加内存使用( 如果有的话,请提出反馈 )。如果你向你模型对象追加越来越多数据,你可能会增加内存使用,这是很正常

12.2K20

掌握 Transaction,实现 SwiftUI 动画精准控制

传递进来 transaction 为 nil SwiftUI 会优化调用 .transaction 修饰器闭包时机。... isActive 为 true ,通过动画更改颜色; scale 为 true ,不使用动画进行缩放。...相较于“隐式动画”,“显式动画”有以下不同之处: 无论在何处执行 withAnimation 函数,SwiftUI 都将从根视图开始派发“显式动画”创建 transaction 状态发生变化时,SwiftUI...因此, Rectangle 尺寸增大,VStack 会调整布局。但由于没有找到对应 transaction,此布局调整过程是非动画。从而导致了这种情况。...开发者应根据需要选择是否采用其内置动画设置。 例如,对于 FetchRequest,我们可以通过三种方式来控制其在数据增加或删除是否采用动画效果。

45020

RPA与Excel(DataTable)

使用write cell在Excel中写入单元格,如果填入一个不存在Sheet名称,则会自动创建此Sheet页。 6. 想起来再补充。。。。或者各位同仁有建议也可以提上来呀 ? ?...处理工作 插入新工作:Shift+F11或Alt+Shift+F1 移动到工作簿中下一张工作:Ctrl+PageDown 移动到工作簿中上一张工作:Ctrl+PageUp 选定当前工作和下一张工作...:Shift+Ctrl+PageDown 取消选定多张工作:Ctrl+ PageDown 选定其他工作:Ctrl+PageUp 选定当前工作和上一张工作:Shift+Ctrl+PageUp 对当前工作重命名...:Alt+O H R 移动或复制当前工作:Alt+E M 删除当前工作:Alt+E L 2....:Ctrl+Shift+Enter 取消单元格或编辑栏中输入:Esc 在公式中,显示“插入函数”对话框:Shift+F3 插入点位于公式中公式名称右侧,弹出“函数参数”对话框:Ctrl+A 插入点位于公式中函数名称右侧

5.7K20

EXCEL VBA语句集300

1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘错误发生转到过程中某个位置...‘当前工作中已使用行数 (19) Rows.Count ‘获取工作行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum...=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作移至工作最后 (23) Worksheets(Array(“sheet1...‘取消当前工作所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation...(“Sheet2”).Range(“A1”) ‘复制包含A1单元格区域到工作2中以A1起始单元格区域中 注:CurrentRegion属性等价于定位命令,由一个矩形单元格块组成,周围是一个或多个空行或列

1.7K40

掌握 SwiftUI task 修饰器

Swift 采用是协作式任务取消机制,也就是说,SwiftUI 是无法直接停止掉我们通过 task 修饰器创建异步任务。...满足了需要停止由 task 修饰器创建异步任务条件SwiftUI 会给该任务发送任务取消信号,任务必须自行响应该信号并停止作业。...在以下两种情况下,SwiftUI 会给由 task 创建异步任务发送任务取消信号:视图( task 修饰器绑定视图 )满足 onDisappear 触发条件绑定值发生变化时( 采用 task 观察值变化时...使用 url.lines 和 url.resourceBytes 获取网络数据,系统 API 会跳转到后台线程,不过最终仍会回到主线程上想要了解并解决这个问题,我们还要从 task 修饰器定义中入手...作为一个事件源类型 Source of Truth,每当接收到一个新消息,它都会导致 SwiftUI视图 body 重新求值。

2.2K30

SwiftUI 状态管理系统指南

SwiftUI没有使用委托、数据源或任何其他在UIKit和AppKit等命令式框架中常见状态管理模式,而是配备了一些属性包装器[1],使我们能够准确地声明我们数据如何被我们视图观察、渲染和改变。...属性状态 由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高层次结构(如应用程序和场景)API),其声明式设计不一定需要影响应用程序整个模型和数据层——而只是直接绑定到我们各种视图状态...其中一个机制是ObservableObject协议,它与ObservedObject属性包装器结合时,我们可以设置与我们视图层之外管理引用类型绑定。...标记为StateObject属性与ObservedObject行为完全相同——此外,SwiftUI将确保存储在此类属性中任何对象不会因为框架在重新渲染视图重新创建新实例而被意外释放: struct...小结 SwiftUI管理状态方式绝对是该框架最有趣方面之一,它可能需要我们稍微重新思考数据在应用中传递方式——至少在涉及到将被我们UI直接消费和修改数据是这样。

5K20
领券