【问题标题】:Switching from one View Controller to another without user interaction从一个视图控制器切换到另一个视图控制器,无需用户交互
【发布时间】:2018-12-02 04:19:13
【问题描述】:

我试图弄清楚如何编写代码,使一个视图控制器转到另一个视图控制器,而无需按下按钮即可转到第二个。

几乎相同的东西 LaunchScreen.storyboard 无需按下按钮即可转到 Main.storyboard,它只是自动执行。我是编码新手,非常感谢任何帮助。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    是的,您可以在不执行任何操作的情况下推送或呈现另一个视图控制器。你只需要在你想触发它的地方调用 push 或 present 代码。

    例如: 如果您希望它在计时器功能上触发,请在此处添加您的推送或呈现代码。

    //I added this code in first viewController's viewDidAppear, so your second controller will be called after 10 seconds.
        override func viewDidAppear(_ animated: Bool) {
    
        super.viewDidAppear(animated)
    
        //If you are using Storyboard
        //10.0 seconds
        DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
    
            //If your first viewController is in Navigation stack
            if let secondViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewControllerID") as? SecondViewController {
    
                if let navigator = self.navigationController {
    
                    navigator.pushViewController(secondViewController, animated: true)
                }
            }
    
            //If your first viewController is NOT in Navigation stack
            if let secondViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewControllerID") as? SecondViewController {
    
                self.present(secondViewController, animated: true, completion: nil)
            }
        }
     }
    

    参考这个帖子:How to push and present to UIViewController programmatically without segue in iOS Swift 3

    【讨论】:

    • 如何在示例中显示代码,我将把代码放在哪里?在第一个 ViewController 或第二个?
    • 如果您正在展示或推送第二个控制器,您应该在第一个控制器中添加您的代码。实际上你想在什么时候/哪里去第二个控制器?
    • 我只想让它转到第二个,只在第二个视图控制器上显示内容
    • 好的,但是当你想去第二个控制器时?
    • 10 秒后
    【解决方案2】:

    这取决于您实际希望如何显示视图控制器。

    如果您尝试复制启动屏幕,那么您可能不希望将下一个 VC 推入堆栈。

    我想您提供的信息的最佳选择是在短暂延迟后更改 rootViewController。应该这样做:

    let delayInSeconds = 5.0
    
    DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) { in
    
        let appDelegate = UIApplication.shared.delegate as? AppDelegate
        let vc = ViewController()
        appDelegate?.window?.rootViewController = vc
    }
    

    【讨论】:

    • 我会在 AppDelegate 或我正在使用的第一个视图控制器中将这段代码发布到哪里?
    • 在您使用的第一个 vc 中
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2015-03-23
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多