You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4/Xcode:多ViewController跳转同一页面后返回对应原页面求助

解决多ViewController跳转至ScoreVC后返回对应原VC的问题

嘿,作为Swift 4和Xcode的新手,这个跳转返回的问题确实很容易踩坑,我来一步步给你讲清楚怎么搞定它,完全用你能理解的方式~

首先搞懂核心逻辑:跳转方式决定返回行为

我们常用的两种跳转方式,对应不同的返回逻辑,选对方式就解决了大半问题:

方式1:用导航控制器(UINavigationController)跳转(最推荐新手用)

这种方式相当于把所有ViewController串成一个“栈”,跳转到新页面是把它“压栈”,返回就是把它“出栈”,自动回到上一个页面。

操作步骤:

  1. 给任务VC嵌入导航控制器:打开Storyboard,右键点击你的第一个任务ViewController,选择「Embed in」→「Navigation Controller」。这样所有后续从这个VC跳转的页面都会在同一个导航栈里。
  2. 给ScoreVC设置Storyboard ID:选中Score ViewController,打开右侧的「Identity Inspector」(第三个图标),在「Storyboard ID」里填个名字,比如ScoreViewController(要和代码里对应)。
  3. 在每个任务VC里写跳转代码:给跳转按钮添加IBAction,代码如下:
@IBAction func jumpToScore(_ sender: UIButton) {
    // 从Storyboard里加载ScoreVC,加个判断避免崩溃
    guard let scoreVC = storyboard?.instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController else {
        print("找不到对应的ScoreVC,检查Storyboard ID是否正确!")
        return
    }
    // 用push方式跳转,把ScoreVC加入导航栈
    navigationController?.pushViewController(scoreVC, animated: true)
}
  1. 自动获得返回按钮:跳转后,ScoreVC的导航栏会自动出现默认的返回箭头,点击它就会回到你刚才跳转过来的那个任务VC,完全不用额外写返回逻辑!

方式2:用模态跳转(Present)(适合不需要导航栏的场景)

如果你不想用导航控制器,而是用弹出式的模态跳转,那只要正确写返回代码就行:

操作步骤:

  1. 同样给ScoreVC设置Storyboard ID(和上面步骤2一样)。
  2. 任务VC里的跳转代码:
@IBAction func presentScoreVC(_ sender: UIButton) {
    guard let scoreVC = storyboard?.instantiateViewController(withIdentifier: "ScoreViewController") as? ScoreViewController else {
        print("检查Storyboard ID是否正确!")
        return
    }
    // 用模态方式弹出ScoreVC
    present(scoreVC, animated: true, completion: nil)
}
  1. ScoreVC里的返回按钮代码:自己给ScoreVC加一个返回按钮,然后写IBAction:
@IBAction func goBackToOriginalVC(_ sender: UIButton) {
    // 关闭当前模态VC,自动回到弹出它的那个任务VC
    dismiss(animated: true, completion: nil)
}

这种方式下,不管是哪个任务VC弹出的ScoreVC,dismiss后都会回到对应的原VC。

新手容易踩的坑

  • 不要混合跳转方式:一会儿用push一会儿用present,会导致导航栈混乱,返回逻辑出错,新手尽量只用一种方式。
  • Storyboard ID一定要对应:代码里的ID和Storyboard里填的必须完全一致,不然会崩溃,一定要仔细检查。
  • 不要随便修改导航栈:新手别乱试popToRootViewController这类代码,除非你明确知道自己要做什么,不然会打乱默认的返回逻辑。

内容的提问来源于stack exchange,提问作者Shadi Saba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:22