gpt4 book ai didi

ios - 在 Swift 3 中将 .scheduledTimer 的变量返回到 TableView Cell

转载 作者:行者123 更新时间:2023-11-30 12:44:15 36 4
gpt4 key购买 nike

我有一个 tableView,每个单元格中都有一个计时器,在调用 tableView:didSelectRowAtIndexPath 时运行。我试图在自定义单元格 (CustomCell) 中使用标签 (cellName) 来显示计时器递增。我在 .scheduledTimer 中使用 #selector 来调用名为 getTimer() 的单独函数来递增该值。代码如下。

我已缩写此代码以仅显示相关信息

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var time = 0


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let cell: CustomCell = tableView.cellForRow(at: indexPath)! as!
CustomCell

var timer = Timer()

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

cell.cellName.text = String(self.getTimer())


}

func getTimer() -> String {

time += 1
return String(time)
}
}

有两件事:

  1. 我的 time 变量是在类级别定义的,以便 getTimer() 可以在每次 .scheduledTimer 刷新时递增该变量。我想在 :didSelectRowAtIndexPath 中定义它,以便我可以同时运行多个计时器。有没有办法在 :didSelectRowAtIndexPath 中定义它,并且可能通过从 getTimer() 返回增量来获取结果?

  2. 目前,我正在使用 getTimer 返回的字符串更新我的 cellName。这是静态的,目前正在考虑在 .scheduledTimer 刷新时刷新它的方法。我是否应该将 indexPath.row 传递给 getTimer 并在 getTimer() 函数本身中更新它?

最佳答案

你的问题逻辑不正确。我会给你一个快速解决你的问题的方法。在类作用域中创建两个变量 timeArraytimerArray

var timeArray = [Int]()
var timerArray = [Timer]()

将此代码放入您的viewDidLoad中。创建数组时,将计数 1 替换为表格 View 中的单元格数。

    timeArray = Array(repeating: 0, count: 1)
let timer = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: nil, repeats: true)
timerArray = Array(repeating: timer, count: 1)

在您的 didSelectRow tableview 委托(delegate)方法中处理计时器验证和失效

    if timerArray[indexPath.row].isValid{
timerArray[indexPath.row].invalidate()
}
else{
timerArray[indexPath.row] = Timer(timeInterval: 1, target: self, selector: #selector(self.timerFired(_:)), userInfo: indexPath.row, repeats: true)
timerArray[indexPath.row].fire()
}

添加此函数,该函数将在计时器触发时触发。

func timerFired(_ timer:Timer){
if let index = timer.userInfo as? Int{
timeArray[index] += 1
}
}

最后,在tableview的cellForRow数据源方法中设置标签文本

cell.cellName.text = time[indexPath.row]

timerFired函数运行时,不要忘记重新加载特定的单元格。

关于ios - 在 Swift 3 中将 .scheduledTimer 的变量返回到 TableView Cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41845303/

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