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

iOS开发:如何从MainVC向CountdownVC传递Int类型值

解决Segue跳转时传递Int值到CountdownVC的问题

嘿,我看你当前的代码问题出在手动创建CountdownVC实例并赋值,和Segue实际跳转的实例不是同一个——你写的let vc = CountdownVC()只是在内存里新建了一个控制器对象,但Segue跳转时会自己创建一个全新的CountdownVC实例,所以你之前赋值的vc.seconds = 60根本不会作用到跳转后的那个页面上,这就是为什么你的传值没效果。

下面给你两种靠谱的解决方案,选哪种都可以:

方案1:用临时属性记录选中的秒数,在prepare方法中传递

这个方法逻辑直观,适合新手:

  1. 首先在MainVC里添加一个临时属性,用来存用户点击按钮对应的秒数:
class MainVC: UIViewController {
    // 用来临时存储选中的倒计时秒数
    var selectedSeconds: Int = 0
    
    // 你的1分钟按钮点击方法
    @IBAction func oneMinuteBtnPressed(_ sender: Any) {
        selectedSeconds = 60
        performSegue(withIdentifier: "toCountdownVC", sender: self)
    }
    
    // 其他按钮的点击方法同理,比如2分钟按钮
    @IBAction func twoMinutesBtnPressed(_ sender: Any) {
        selectedSeconds = 120
        performSegue(withIdentifier: "toCountdownVC", sender: self)
    }
}
  1. 然后在MainVC里实现prepare(for:sender:)方法——这个方法是Segue跳转前系统会自动调用的,我们在这里给目标控制器赋值:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 先判断是不是我们要的那个Segue,同时安全转成目标控制器类型
    guard segue.identifier == "toCountdownVC", 
          let countdownVC = segue.destination as? CountdownVC else {
        return
    }
    // 把临时存储的秒数传递过去
    countdownVC.seconds = selectedSeconds
}

方案2:直接通过按钮Sender判断,在prepare方法中赋值

如果不想加临时属性,可以给每个按钮设置Tag,然后在跳转时直接识别:

  1. 先给每个按钮设置对应的Tag值(比如1分钟按钮Tag设为60,2分钟设为120,以此类推,直接用秒数当Tag很方便),然后把所有按钮的IBAction关联到同一个方法:
class MainVC: UIViewController {
    @IBAction func countdownBtnPressed(_ sender: UIButton) {
        // 直接把按钮作为sender传递给Segue
        performSegue(withIdentifier: "toCountdownVC", sender: sender)
    }
}
  1. 同样实现prepare(for:sender:)方法,通过按钮的Tag获取对应的秒数:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "toCountdownVC", 
          let selectedBtn = sender as? UIButton else {
        return
    }
    let countdownVC = segue.destination as! CountdownVC
    // 直接用按钮的Tag作为秒数(前提是你已经给按钮设置了正确的Tag)
    countdownVC.seconds = selectedBtn.tag
}

最后要注意的点

确保你的CountdownVC里的seconds属性是可以被外部访问的,不要加private修饰符:

class CountdownVC: UIViewController {
    // 这里不要加private,让MainVC能直接赋值
    var seconds: Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 这里就可以使用seconds来处理倒计时逻辑了,比如转成分钟
        let minutes = seconds / 60
        print("即将开始\(minutes)分钟倒计时")
    }
}

这样修改后,点击按钮跳转时,CountdownVC就能拿到正确的秒数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:03:08