【发布时间】:2018-12-02 04:19:13
【问题描述】:
我试图弄清楚如何编写代码,使一个视图控制器转到另一个视图控制器,而无需按下按钮即可转到第二个。
几乎相同的东西 LaunchScreen.storyboard 无需按下按钮即可转到 Main.storyboard,它只是自动执行。我是编码新手,非常感谢任何帮助。
【问题讨论】:
我试图弄清楚如何编写代码,使一个视图控制器转到另一个视图控制器,而无需按下按钮即可转到第二个。
几乎相同的东西 LaunchScreen.storyboard 无需按下按钮即可转到 Main.storyboard,它只是自动执行。我是编码新手,非常感谢任何帮助。
【问题讨论】:
是的,您可以在不执行任何操作的情况下推送或呈现另一个视图控制器。你只需要在你想触发它的地方调用 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
【讨论】:
这取决于您实际希望如何显示视图控制器。
如果您尝试复制启动屏幕,那么您可能不希望将下一个 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
}
【讨论】: