使用Swift

时间:2018-06-01 01:59:35

标签: ios swift uitableview uilabel

我有一个特殊的难题,我需要UILabel内的特定UITableViewCell来更新每一分钟。目前,每一分钟,整个单元格都刷新并显示在上一个单元格下方,如下所示,我想要做的就是刷新UILabel watchTime

enter image description here

这是我的tableView,其中我从模型

初始化观察时间分钟数
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "watchTimeCell", for: indexPath) as! WatchTimeCell
    if userModel.count > indexPath.row {
        //this is the value i want to update
        cell.watchTime.text = "\(String(describing: userModel[indexPath.row].watchTime!))"
    }
    return cell
}

以下是我目前更新我的手机的方式:

@objc func updateCounting(){
    watchTime += 1
    if watchTime % 60 == 0 {
        let userRef = Database.database().reference().child("users").child(uid!).child("watchTime")
        userRef.runTransactionBlock({ (currentData: MutableData) -> TransactionResult in
            let newValue: Int

            if let existingValue = (currentData.value as? NSNumber)?.intValue {
                newValue = existingValue + 1
            } else {
                newValue = 1
            }

            currentData.value = NSNumber(value: newValue)

            //this is the line where I reload the cell

            DispatchQueue.main.async(execute: {
                self.watchTableView.reloadData()
            })

            return TransactionResult.success(withValue: currentData)
        })
        watchTime = 0
        }
    }

最好的方法是什么?谢谢!

编辑:已添加numberOfRowsInSection

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

2 个答案:

答案 0 :(得分:2)

您正在做的事情对于表格视图基本上是正确的。您更新模型并调用reloadcellForRowAt传播到表视图。在这种情况下,您可以通过调用reloadRows(at:with:)来节省一些开销,以便仅重新加载一个单元格。

...除

只有一个单元格。但是单细胞表视图是荒谬的。它的目的是什么?要使界面可滚动?然后只做一个滚动视图。现在您可以直接更新标签。

答案 1 :(得分:0)

我会创建那个单元格,并在持有tableView的ViewController中引用它。

let mainCell = WatchTimeCell()

在WatchTimeCell类中,我将添加一个公共函数来更新时间计数

public func updateTimeCountLabel(_ count: Int) {
 self.nameOfLabel.text = "\(count)"

}

然后在updateCounting()中我会调用WatchTimeCell中的updateTimeCountLabel。

self.mainCell.updateTimeCountLabel(newValue)

但是numberOfRowsForSection中发生了一些事情,你可以发帖吗?