我正在登录屏幕。单击登录按钮后,我将在响应上进行API调用,将用户重定向到主屏幕。
Q-如何通过单击按钮并执行某些操作从一个视图导航到另一个视图。
我已经尝试过了 Programatically navigate to new view in SwiftUI
但是我遇到了类似的错误
“函数声明了一个不透明的返回类型,但是在其主体中没有可从中推断出基础类型的返回语句”
请帮助我解决该问题。
答案 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
替换为所需的任何视图。