Программно перейти к новому представлению в SwiftUI - PullRequest
1 голос
/ 25 июня 2019

Описательный пример:

экран входа в систему, пользователь нажимает кнопку «Войти», запрос выполняется, пользовательский интерфейс показывает индикатор ожидания, затем после успешного ответа я бы хотел автоматически перейти к следующему экрану пользователя.

Как мне добиться такого автоматического перехода в SwiftUI?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Вы можете заменить следующий вид на ваш вид входа в систему после успешного входа в систему. Например:

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 для соответствия протоколу 'BindableObject' свойство willChange имеет будет добавлено

class UserAuth: BindableObject {

  let didChange = PassthroughSubject<UserAuth,Never>()

  // required to conform to protocol 'BindableObject' 
  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)
    // }
  }
}
0 голосов
/ 25 июня 2019

Теперь вам нужно просто создать экземпляр нового представления, к которому вы хотите перейти, и поместить его в NavigationButton:

NavigationButton(destination: NextView(), isDetail: true, onTrigger: { () -> Bool in
    return self.done
}) {
    Text("Login")
}

Если вы вернете true, onTrigger означает, что вы успешно вошли в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...