SwiftUI:以编程方式关闭工作表
Posted
技术标签:
【中文标题】SwiftUI:以编程方式关闭工作表【英文标题】:SwiftUI: dismiss sheet programmatically 【发布时间】:2020-07-17 10:12:33 【问题描述】:我正在使用 SwiftUI,并且正在尝试为我的应用实现身份验证逻辑。
我有一个带有注册按钮的 LoginView,如果我点击它,我会使用一张表格来展示 RegisterView。用户注册后,LoginView(在后台)转到 HomeView 并且 RegisterView 应该消失。问题是 RegisterView 并没有消失。
@ObservedObject var viewModel = RegisterViewModel()
@EnvironmentObject var authenticatedUser : AuthenticatedUser
@Environment(\.presentationMode) var presentationMode
ButtonWithLoadStateView(title: K.REGISTER, isLoading: self.$vm.isLoading)
self.viewModel.isLoading = true
self.viewModel.register() user in
self.authenticatedUser.setLogged(user) // without this IT WORKS!
self.presentationMode.wrappedValue.dismiss()
如果我删除了 authenticatedUser.setLogged 行,那么它可以工作,但它只是封装了用户并存储了一个令牌..
【问题讨论】:
【参考方案1】:提供的代码是不可测试的,所以只是想法 - 尝试以下
ButtonWithLoadStateView(title: K.REGISTER, isLoading: self.$vm.isLoading)
self.viewModel.isLoading = true
self.viewModel.register() user in
DispatchQueue.main.async
self.authenticatedUser.setLogged(user)
self.presentationMode.wrappedValue.dismiss()
【讨论】:
@LalaCip,我没有看到您的代码,但很可能在设置用户上您的视图层次结构已重建,因此与先前演示模式的绑定连接被破坏。通过延迟用户分配,我们有机会关闭演示文稿,然后才重建视图层次结构。以上是关于SwiftUI:以编程方式关闭工作表的主要内容,如果未能解决你的问题,请参考以下文章