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

如何在prepare(for segue:)中区分Segue,实现按钮不同跳转逻辑?

搞定这个跳转传值的小问题很简单!

核心思路就是给两个Segue设置不同的唯一标识符,这样我们就能在prepare(for:sender:)方法里区分开哪个跳转需要传数据,哪个只需要跳转就行。

第一步:给Segue设置标识符

  1. 打开你的Storyboard,选中顶部按钮对应的那条Segue(VC1到VC2的连线)
  2. 右侧属性面板切换到「Identity Inspector」,在「Storyboard Segue」区域的「Identifier」栏输入一个名字,比如segueWithData
  3. 同样操作底部按钮的Segue,给它设另一个标识符,比如segueWithoutData

第二步:修改VC1的代码

接下来调整你的prepare(for:sender:)方法,通过判断Segue的标识符来决定是否传递文本框数据:

import UIKit

class ViewController: UIViewController {
    @IBOutlet var textfield: UITextField!
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 先确认目标控制器是我们要的VC2(顺便提一句,Swift类名建议用大驼峰,比如把twoViewControlle改成TwoViewController哦)
        guard let vc2 = segue.destination as? TwoViewController else {
            return
        }
        
        // 只有触发顶部按钮的Segue时,才传递文本框内容
        if segue.identifier == "segueWithData" {
            // 这里假设VC2里有个叫receivedText的属性用来存数据,你得根据自己的VC2代码调整
            vc2.receivedText = textfield.text ?? ""
        }
        // 底部按钮的Segue因为标识符不匹配,就会跳过传值逻辑,直接完成跳转
    }
}

补充:VC2的接收代码

别忘了在VC2里定义接收数据的属性,比如:

class TwoViewController: UIViewController {
    // 用来接收VC1传过来的文本
    var receivedText: String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 这里就可以用receivedText做你想做的事啦,比如显示到标签上
        // label.text = receivedText
    }
}

这样设置后,顶部按钮跳转时会把文本框的内容传给VC2,底部按钮就只会单纯跳转,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:54