swiftUI:登录完成后导航至主屏幕。通过按钮导航视图

时间:2019-10-24 08:34:54

标签: ios swift swiftui

我正在登录屏幕。单击登录按钮后,我将在响应上进行API调用,将用户重定向到主屏幕。

Q-如何通过单击按钮并执行某些操作从一个视图导航到另一个视图。

我已经尝试过了 Programatically navigate to new view in SwiftUI

但是我遇到了类似的错误

“函数声明了一个不透明的返回类型,但是在其主体中没有可从中推断出基础类型的返回语句”

请帮助我解决该问题。

2 个答案:

答案 0 :(得分:3)

some View自动柜员机出现问题(希望很快会解决)。

要使用发布的代码,您将需要编写以下内容:

struct ContentView: View {

    @EnvironmentObject var userAuth: UserAuth 

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

    }
}

在撰写本文时,清单上这对我来说只是一件事情-无论是对于身体还是对于小组。

参考日期:2019年10月24日。

答案 1 :(得分:0)

或者查看SceneDelgate.swift,您可以在其中将键窗口的根视图设置为所需的任何内容。

在您成功登录的情况下,可以向SceneDelegate发出状态更改信号(例如通过Notification)。然后,让该应用将根视图控制器设置为您的主视图(作为UIHostingController)。

例如:

在您的SceneDelegate类中添加: var currentScene: UIScene? // need to keep reference

然后在func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)

在上面声明的变量中保存对场景的引用。

self.currentScene = scene

接下来,当您想使用新视图更改键窗口时,添加一个侦听器:

 var keyWindow: UIWindow?

 NotificationCenter.default.addObserver(forName: .newUser, object: nil, queue: .main) { [weak self] (notification) in

      guard let windowScene = self?.currentScene as? UIWindowScene else { return }

      keyWindow = UIWindow(windowScene: windowScene)
      keyWindow?.rootViewController = UIHostingController(rootView: Text("hello"))
      keyWindow?.makeKeyAndVisible()

    }

只需将通知设置为在需要时发布,然后将Text替换为所需的任何视图。