Изменить корневое представление UIHostingController в SwiftUI - PullRequest
0 голосов
/ 25 сентября 2019

Для нового приложения SwiftUI для iOS я делаю следующее в SceneDelegate

     if let windowScene = scene as? UIWindowScene {
         let window = UIWindow(windowScene: windowScene)
         if Auth().token == nil {
             window.rootViewController = UIHostingController(rootView: StartRegistrationView())
         } else {
             window.rootViewController = UIHostingController(rootView: MainTabbedView())
         }
         self.window = window
         window.makeKeyAndVisible()
     }

Когда пользователь не зарегистрировался или не вошел в систему, он попадает в поток регистрации.

Как только пользователь зарегистрировался, как я могу переключить RootView, чтобы перейти к моему TabView?Я не могу найти какое-либо решение с помощью SwiftUI.

Должен ли я вместо этого использовать объект Environment и слушать, как изменяется статус авторизации пользователя?

1 Ответ

1 голос
/ 25 сентября 2019

Объявите AppRootView, что-то вроде этого:

struct AppRootView: View {

    @ObservedObject private var auth: Auth
    var body: some View {
        Group {
            if auth.token != nil {
                MainTabbedView()
            } else {
                StartRegistrationView()
            }
        }
    }
}

, а затем в SceneDelegate установите его в качестве корневого представления:

window.rootViewController = UIHostingController(rootView: AppRootView(auth: $auth))

Вы должны связатьваш взгляд на ваш Auth (), либо передав его, как я делал выше, либо установив его в вашей среде.Прелесть SwiftUI в том, что как только токен не равен нулю, представление будет перерисовано, и ваш пользователь найдет себя в MainTabbedView.

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