以编程方式导航到 SwiftUI 中的新视图 [英] Programmatically navigate to new view in SwiftUI

查看:35
本文介绍了以编程方式导航到 SwiftUI 中的新视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

描述性示例:

登录屏幕,用户点击登录"按钮,执行请求,UI显示等待指示器,然后在成功响应后我想自动将用户导航到下一个屏幕.

login screen, user taps "Login" button, request is performed, UI shows waiting indicator, then after successful response I'd like to automatically navigate user to the next screen.

如何在 SwiftUI 中实现这种自动转换?

How can I achieve such automatic transition in SwiftUI?

推荐答案

您可以在登录成功后用您的登录视图替换下一个视图.例如:

You can replace the next view with your login view after a successful login. For example:

struct LoginView: View {
    var body: some View {
        ...
    }
}

struct NextView: View {
    var body: some View {
        ...
    }
}

// Your starting view
struct ContentView: View {

    @EnvironmentObject var userAuth: UserAuth 

    var body: some View {
        if !userAuth.isLoggedin {
            LoginView()
        } else {
            NextView()
        }

    }
}

您应该在您的数据模型中处理您的登录过程,并使用诸如 @EnvironmentObject 之类的绑定将 isLoggedin 传递给您的视图.

You should handle your login process in your data model and use bindings such as @EnvironmentObject to pass isLoggedin to your view.

注意:在 Xcode Version 11.0 beta 4 中,为了符合协议 'BindableObject'willChange 必须添加属性

Note: In Xcode Version 11.0 beta 4, to conform to protocol 'BindableObject' the willChange property has to be added

import Combine

class UserAuth: ObservableObject {

  let didChange = PassthroughSubject<UserAuth,Never>()

  // required to conform to protocol 'ObservableObject' 
  let willChange = PassthroughSubject<UserAuth,Never>()

  func login() {
    // login request... on success:
    self.isLoggedin = true
  }

  var isLoggedin = false {
    didSet {
      didChange.send(self)
    }

    // willSet {
    //       willChange.send(self)
    // }
  }
}

这篇关于以编程方式导航到 SwiftUI 中的新视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆