我正在制作一个计时器应用程序。我有两个视图控制器,一个有定时器(第二个视图控制器),如下所示
protocol PassBack {
func passBackData(minutesDone: Int)
}
class SessionTimerViewController: UIViewController {
var delegate: PassBack?
var timeLeft = 10
var totalTT = ""
var timer = Timer()
var minutesDone = 0
override func viewDidLoad() {
super.viewDidLoad()
timeAllocated.text = "\(totalTT) minutes"
timeLeft = Int(totalTT)! * 60
let hours = timeLeft / 3600
let minutes = timeLeft / 60 % 60
let seconds = timeLeft % 60
remainingTime.text = String(format:"%02i:%02i:%02i", hours, minutes, seconds)
}
override func viewWillDisappear(_ animated: Bool) {
delegate?.passBackData(minutesDone: minutesDone)
dismiss(animated: true, completion: nil)
self.navigationController?.popViewController(animated: true)
}
func toggleTimer(on: Bool) {
if on {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) {
timer in
self.timeLeft -= 1
self.minutesDone = (Int(self.totalTT)! * 60) - self.timeLeft
let hours = self.timeLeft / 3600
let minutes = self.timeLeft / 60 % 60
let seconds = self.timeLeft % 60
self.remainingTime.text = String(format:"%02i:%02i:%02i", hours, minutes, seconds)
if self.timeLeft == 0 {
timer.invalidate()
}
} else {
timer.invalidate()
}
}
}我已经成功地将minutesDone传递回第一个视图控制器。第一个视图控制器中的代码如下所示。
class TreatmentTimeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var nameTime = [NameTime]()
var treatmentTime1 = 10
var statusUpdate1 = "Not treated"
var minutesDone1 = 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TreatmentTimeCell", for: indexPath) as? TreatmentTimeTableViewCell
cell?.patientName?.text = nameTime[indexPath.row].patientName
cell?.treatmentTime?.text = "\(nameTime[indexPath.row].treatmentTime)"
let value = nameTime[indexPath.row].treatmentTime
var value2 = nameTime[indexPath.row].minutesDone
value2 = minutesDone1
if value2 == value {
statusUpdate1 = "Treatment completed"
} else if value2 == 0 {
statusUpdate1 = "Not treated"
} else if value2 < value {
statusUpdate1 = "Currently treating"
}
cell?.minutesDone?.text = "\(value2)"
cell?.statusUpdate?.text = statusUpdate1
return cell!
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationVC = storyboard.instantiateViewController(withIdentifier: "SessionTimerViewController") as? SessionTimerViewController
tableView.deselectRow(at: indexPath, animated: true)
let value = nameTime[indexPath.row].treatmentTime
treatmentTime1 = value
destinationVC?.totalTT = "\(treatmentTime1)"
destinationVC?.delegate = self
self.navigationController?.pushViewController(destinationVC!, animated: true)
}
extension TreatmentTimeViewController: PassBack {
func passBackData(minutesDone: Int) {
minutesDone1 = minutesDone / 60 % 60
tableView.reloadData()
}
}我有以下问题,我需要帮助
TreatmentTimeViewController中不断更新。我是否需要设置另一个定时器,还是有一种方法来同步2视图控制器中的定时器?如果是这样的话,最好的方法是什么呢?SessionTimerViewController,即在didSelectRowAt,它总是再次启动计时器。我该如何提出这样一个条件:如果它已经在运行,那么它应该在离开的地方继续运行?提前谢谢你。发布于 2020-07-30 06:50:38
https://stackoverflow.com/questions/63165790
复制相似问题