【问题标题】:Passing Int value from one VC to another [duplicate]将 Int 值从一个 VC 传递到另一个 [重复]
【发布时间】:2018-04-16 11:28:37
【问题描述】:

我尝试关注这个使用字符串值的guide,但它并没有那么有用。我正在开发一个有 8 个按钮的应用程序,每个按钮都会分配一个数字,表示在 CountdownVC 中转换为分钟的秒数。当我点击一个按钮并将值分配给 CountdownVC 中的 var seconds = 0 时,我试图传递 Int 值。

按下 MainVC 中的按钮时:

@IBAction func oneMinuteBtnPressed(_ sender: Any) {

        let vc = CountdownVC()
        vc.seconds = 60
        performSegue(withIdentifier: "toCountdownVC", sender: self)
    }

我想将分配的值传递给 CountdownVC,使其成为var seconds = 60

import UIKit

class CountdownVC: UIViewController {

@IBOutlet weak var countdownLbl: UILabel!
@IBOutlet weak var startBtn: UIButton!
@IBOutlet weak var pauseBtn: UIButton!
@IBOutlet weak var resetBtn: UIButton!

// Variables
var seconds = 0 // This variable will hold the starting value of seconds. It could be any amount over 0
var timer = Timer()
var isTimerRunning = false // This will be used to make sure the only one time is created at a time.
var resumeTapped = false

override func viewDidLoad() {
    super.viewDidLoad()
    pauseBtn.isEnabled = false

}
func runTimer() {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(CountdownVC.updateTimer)), userInfo: nil, repeats: true)
    isTimerRunning = true
    pauseBtn.isEnabled = true
}
@objc func updateTimer(){
    if seconds < 1 {
        timer.invalidate()
        //TODO: Send alert to indicate "time is up!"
    } else {
        seconds -= 1 //This will decrement(count down) the seconds.
        countdownLbl.text = timeString(time: TimeInterval(seconds)) //This will update the label
    }
}
func timeString(time: TimeInterval) -> String {

    let hours = Int(time) / 3600
    let minutes = Int(time) / 60 % 60
    let seconds = Int(time) % 60
    return String(format: "%02i:%02i:%02i", hours, minutes, seconds)
}

除了 segue 部分之外,我上面的内容似乎不起作用。任何帮助将不胜感激。

【问题讨论】:

标签: ios swift4


【解决方案1】:

正如 Quoc Nguyen 指出的那样,您正在为永远不会使用的控制器分配一个值。

当您调用performSegue 时,这将实例化一个与您创建的不同的vc。

如果你想将一些东西传递给你的故事板创建的 vc,你需要使用这样的东西:

@IBAction func oneMinuteBtnPressed(_ sender: Any) {
        performSegue(withIdentifier: "toCountdownVC", sender: self)
}

 // This function is called before the segue
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     // get a reference to the your view controller
     if let nextViewController = segue.destination as? CountdownVC {
        nextViewController.seconds = 60
     }
 }

【讨论】:

  • RomOne、Quoc 和 Suragch,非常感谢您的帮助。你们的共同努力帮助我更好地理解了我的问题。
  • 不用担心 ;) 很高兴它有帮助。不要忘记投票或接受正确答案,以便其他人可以快速查看对给定问题有帮助的内容。
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2017-12-10
  • 2016-12-30
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多