我在所有视图中都使用SwiftUI 1.0,从主视图开始,它是除登录界面外的主屏幕,因为我正在使用客户端LoginSDK,该SDK是通过UIKit创建的。
因此,在LoginViewController中,我可以使用以下代码在成功登录后推送MainView():
func showMainView() {
let host = UIHostingController(rootView: MainView())
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.pushViewController(host, animated: true)
}
在MainView中,我尝试实现一个注销方法,当用户点击注销按钮时将LoginViewController设置为根视图,代码如下:
struct MainView: View {
var body: some View {
NavigationView {
VStack {
Button(action: {
logout()
}, label: {
Image("Logout")
.resizable()
.frame(width: 20, height: 16)
})
}
}
}
//Method to logout and set the RootNavigationViewController as rootViewController
func logout () {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
//The LoginViewController is embedded in RootNavigationViewController
let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationViewController") as! UINavigationController
if let window = UIApplication.shared.windows.first {
window.rootViewController = rootViewController
window.endEditing(true)
window.makeKeyAndVisible()
}
}
}
以上的注销方法实现并没有做任何事情。我想知道如何从MainView(一个SwiftUI结构)导航回登录视图控制器(一个UIKit UIViewController)。