我制作的游戏在UITableViewCells
中有10 UITableView
。 10 UITableViewCells
中的每一个都有一个UIProgressView
加上许多其他观点。我每1/10秒更新一次UITableView
,这非常慢并且在旧设备上滞后。我每隔1/10秒更新一次用户体验,为游戏提供顺畅的进度视图。
有没有办法只更新每个单元格中的进度视图,而不必调用将更新每个单元格中所有视图的tableView.reloadData()
?
代码示例:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "businessCell", for: indexPath) as! BusinessCell
cell.progress.progress = Float( businessArray[indexPath.row-1].getCurrentProgress() )
//lots of other views are updated here
return cell
}
}
我可以改变这一行:
cell.progress.progress = Float( businessArray[indexPath.row-1].getCurrentProgress() )
这样的事情:
cell.progress.progress = someVarLocalToViewControllerContainingTableView[indexPath.row]
当我更新这个本地var时,它只会更新progressView或者什么? 我尝试了很多方法,但无法弄清楚如何做到这一点......
答案 0 :(得分:1)
如果您需要更新特定单元格的进度,请调用此
func reloadProgress(at index: Int) {
let indexPath = IndexPath(row: index, section: 0)
if let cell = tableView.cellForRow(at: indexPath) as? BusinessCell {
cell.progress.progress = Float( businessArray[index - 1].getCurrentProgress() )
}
}
如果您需要重新加载表格中的所有条形码:
func reloadProgress() {
for indexPath in tableView.indexPathsForVisibleRows ?? [] {
if let cell = tableView.cellForRow(at: indexPath) as? BusinessCell {
cell.progress.progress = Float( businessArray[indexPath.row - 1].getCurrentProgress() )
}
}
}
答案 1 :(得分:0)
你可以使用:
function remover(itemToDelete, items){
var i = 0,
check = false;
for (var item of items){
check = Array.isArray(item) ? item.includes(itemToDelete)
: item === itemToDelete;
check ? items.splice(i,1)
: i++;
}
return items;
}
var groceries = ["toothpaste", ["plums", "peaches", "pineapples"], ["carrots", "corn", "green beans"], "orange juice", ["chocolate", "ice cream"], "paper towels", "fish"];
console.log(remover("chocolate", groceries));
console.log(remover("fish", groceries));
而不是使用self.tableView .reloadRows(at: <[IndexPath]>, with: <UITableViewRowAnimation>)
请查看以下链接:
这可能会对您的情况有所帮助。