如何在prepare(for segue:)中区分Segue,实现按钮不同跳转逻辑?
搞定这个跳转传值的小问题很简单!
核心思路就是给两个Segue设置不同的唯一标识符,这样我们就能在prepare(for:sender:)方法里区分开哪个跳转需要传数据,哪个只需要跳转就行。
第一步:给Segue设置标识符
- 打开你的Storyboard,选中顶部按钮对应的那条Segue(VC1到VC2的连线)
- 右侧属性面板切换到「Identity Inspector」,在「Storyboard Segue」区域的「Identifier」栏输入一个名字,比如
segueWithData - 同样操作底部按钮的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
相关产品推荐
相关产品推荐

