`开始这个项目时,我想在视图方面保持整洁,所以我制作了一个 StoryBoard,其中有我的登录视图和一个有家的 StoryBoard,也就是说,我不使用 Main 作为故事板。
当我从 sceneDelegate 启动应用程序时,我可以知道我是否已登录,因为我在 UserDefaults 中保存了相应的标志,因此这就是我创建 StoryBoard 或另一个及其各自的 UIViewController 的方式。
我的问题是当我本身进行登录时,因为那时我想重定向到使用 HomeUIViewController 的 homeStoryBoard。 通过单独组织这些视图,我找不到一种方法可以在无法返回登录的情况下转到该视图,因为我已经登录了。 我发现的方式,从家里提高了视图,就好像它是一个弹出窗口,但这对我来说不起作用。
我来制作一个新项目,我使用了一个单一的 StoryBoard Main 并在那里有我的观点,但是通过这个解决方案,我看到的问题是生成了“后退”按钮,这将使我从主页返回到登录,而这不会也帮帮我吧。
我在 mi sceneDelegate 中编写了下一个代码...
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let _ = UserDefaults.standard.string(forKey: kIsLogged) {
print("I'm loggin")
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.makeKeyAndVisible()
let storyboard = UIStoryboard(name: "ServiceHomeViewStoryBoard", bundle: nil)
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "SB_ServiceHome")
} else {
print("I'm not loggin")
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.makeKeyAndVisible()
let storyboard = UIStoryboard(name: "LogIn", bundle: nil)
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "LogInStoryBoard")
}
}
在我的 LooginViewController 中,我在登录功能成功后创建...
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SB_ServiceHome") as! ServiceHomeViewController
self.navigationController?.pushViewController(secondViewController, animated: true)
self.present(secondViewController, animated: true)
我认为您需要在移动到家庭控制器时设置根视图控制器。 这里我有
scenedelegate
的扩展,你可以在其中根视图控制器。
扩展
extension SceneDelegate {
func setRootViewController(controller:UIViewController) {
let navigationController = UINavigationController(rootViewController: controller)
navigationController.isNavigationBarHidden = true
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
}
}
如何使用
guard let scene = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate else {return}
let storyBoard = UIStoryboard(name: "YOUR_STORYBOARD_NAME", bundle: nil)
guard let vc = storyBoard.instantiateViewController(withIdentifier: "YOUR_CONTROLLER_NAME") as? YOUR_CONTROLLER_NAME_CLASS else {return}
scene.setRootViewController(controller: vc)