gpt4 book ai didi

ios - 如何构建一个按钮来单独控制计时器并在标签中显示倒计时?

转载 作者:行者123 更新时间:2023-11-30 11:25:47 28 4
gpt4 key购买 nike

我 4 个月前刚刚学习 Swift,但我遇到了一个问题,但我不知道如何解决它。我在 StackOverflow、Youtube 和 Medium 上看了很多教程,但找不到合适的解决方案。

我的项目是:在ViewController中,有一个TableView,每个tableViewCell都有一个timerLabel、timerNameLabel、playButton和stopButton。当我单击播放按钮时,单元格的时间标签将开始倒计时。当我单击 stopButton 时,计时器将停止。

我知道如何构建正确的计时器和正确的 tableView:

View Controller :

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {



var myTimerList = CustomTimerList()

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myTimerList.timerList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! TimerTableViewCell
return cell
}

}

TimerTableViewCell:

import UIKit

class TimerTableViewCell: UITableViewCell {

var timer = Timer()

@IBOutlet weak var timerName: UILabel!
@IBOutlet weak var secondLeftLabel: UILabel!
@IBAction func stopButton(_ sender: UIButton) {

timer.invalidate()

}

@IBAction func playButton(_ sender: UIButton) {

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(updateTimer)), userInfo: nil, repeats: true)

}

@objc func updateTimer() {



}

}

定时器类:

import Foundation

class TimerClass {


let timerSecond : Int
let timerName : String

init(second:Int, name:String) {


timerSecond = second
timerName = name

}

}

定时器列表:

import Foundation

class CustomTimerList {

var timerList = [TimerClass]()

init() {

let customTimer = TimerClass(second: 100, name: "AAA")
timerList.append(customTimer)
timerList.append(TimerClass(second: 200, name: "BBB"))
timerList.append(TimerClass(second: 400, name: "CCC"))
timerList.append(TimerClass(second: 150, name: "DDD"))
timerList.append(TimerClass(second: 800, name: "EEE"))
timerList.append(TimerClass(second: 1000, name: "FFF"))

}

}

但我的问题是:

1.我尝试将 runTimer 放入 tableViewCell 中,并将 playButton 作为 IBAction 链接到 tableViewCell.swift。这个按钮里面是runTimer,但是如何从TimerList获取数据并在timerLabel中显示倒计时,因为我无法获取indexPath.row。

2.我尝试将runTimer放入viewController中,以便runTimer可以获得indexPath.row,但它还有另一个问题:如何在timerLabel上显示runTimer的结果并使其倒计时,因为timerLabel是链接到 tableViewCell 而不是 viewController。

我尝试了很多协议(protocol)等方法,但我发现我无法正确处理协议(protocol),所以我不知道如何正确修改代码。

这是原始文件:https://app.box.com/s/0xviuay00pa2ief8b94ar5oh1002q3tn

最佳答案

您需要设置cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! TimerTableViewCell

let item = CustomTimerList.timerList[indexPath.row]
cell.timerName.text = item.name
cell.secondLeftLabel.text = "\(item.second)"

return cell
}

//

struct CustomTimerList {

static var timerList = [
TimerClass(second: 100, name: "AAA"),
TimerClass(second: 200, name: "BBB"),
TimerClass(second: 400, name: "CCC"),
TimerClass(second: 150, name: "DDD"),
TimerClass(second: 800, name: "EEE"),
TimerClass(second: 1000, name: "FFF")]

}

//

不用担心倒计时标签的当前内容并存储当前值,而是从文本中获取当前值,如果它不为零,则减少它并将其设置回来,也不要认为您当前没有如果用户在 cellForRowAt

中的此行之后滚动,则计时器的停止机制
 let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! TimerTableViewCell
cell.timer?.invalidate()

//

class TimerTableViewCell: UITableViewCell {
var timer:Timer?
}

关于ios - 如何构建一个按钮来单独控制计时器并在标签中显示倒计时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750595/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com