SwiftUIでプログラム的に新しいビューに移動する 質問する

SwiftUIでプログラム的に新しいビューに移動する 質問する

説明例:

ログイン画面で、ユーザーが「ログイン」ボタンをタップし、リクエストが実行され、UI に待機インジケーターが表示されます。その後、応答が成功したら、ユーザーを自動的に次の画面に移動したいと思います。

SwiftUI でこのような自動遷移を実現するにはどうすればよいですか?

ベストアンサー1

ログインが成功したら、次のビューをログイン ビューに置き換えることができます。例:

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

注記:Xcodeの場合バージョン 11.0 ベータ 4、プロトコルに従う'バインド可能なオブジェクト'変更されますプロパティを追加する必要があります

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)
    // }
  }
}

おすすめ記事