【问题标题】:SwiftUI: dismiss sheet programmaticallySwiftUI:以编程方式关闭工作表
【发布时间】: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 行,那么它可以工作,但它只是封装了用户并存储了一个令牌..

【问题讨论】:

    标签: ios swift swiftui


    【解决方案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,我没有看到您的代码,但很可能在设置用户上您的视图层次结构已重建,因此与先前演示模式的绑定连接被破坏。通过延迟用户分配,我们有机会关闭演示文稿,然后才重建视图层次结构。
    猜你喜欢
    • 2020-12-19
    • 2020-11-05
    • 2020-05-24
    • 1970-01-01
    • 2011-02-20
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多