Swift - 从故事板重定向到另一个

问题描述 投票:0回答:1

`开始这个项目时,我想在视图方面保持整洁,所以我制作了一个 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)
ios swift swiftui storyboard
1个回答
0
投票

我认为您需要在移动到家庭控制器时设置根视图控制器。 这里我有

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)
© www.soinside.com 2019 - 2024. All rights reserved.