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:以编程方式关闭工作表的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何关闭工作表视图,同时关闭该视图

SwiftUI:关闭第一个工作表时如何显示第二个工作表

关闭工作表 SwiftUI

SwiftUI 模式表在关闭后重新打开

SwiftUI 工作表在第一次呈现时被关闭

SwiftUI - 如何防止工作表中的键盘向上推我的主 UI