如果用户点击新单元格,我想更改最后一个单元格的图像。现在我这样做:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//Old Cell Image
let lastCell = tableView.cellForRow(at: self.lastCell) as! DataTableViewCell!;
lastCell?.imageButton.image = UIImage(named: "RadioButtomDeactive.png")
let indexPathCel = tableView.indexPathForSelectedRow;
let currentCell = tableView.cellForRow(at: indexPathCel!) as! DataTableViewCell!;
dateSelected = currentCell?.dateSession.text
currentCell?.imageButton.image = UIImage(named: "RadioButtom.png")
}
我尝试将indexPath.row
保存在lastCell
(这是一个int),但由于cellForRow
只接受indexPath
,因此无法正常工作。
答案 0 :(得分:3)
您可以使用存储的IndexPath
通过以下方式创建lastCell
:
IndexPath(row: self.lastCell, section: 0)
如果有多个部分,您只需要插入最后一部分而不是0
。
答案 1 :(得分:2)
为什么不在内存中保留IndexPath而不是Int?
或
您可以使用
从Int创建IndexPathIndexPath(row: Int, section: Int)
答案 2 :(得分:1)
我有一个非常不同的解决方案。
var selectedIndexPath: IndexPath?
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
...
if indexPath == selectedIndexPath {
cell.imageButton.image = UIImage(named: "RadioButtom.png")
} else {
cell.imageButton.image = UIImage(named: "RadioButtomDeactive.png")
}
...
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedIndexPath = indexPath
if let visibleIndexPaths = tableView.indexPathsForVisibleRows {
tableView.reloadRows(at: visibleIndexPaths, with: .none)
}
}
使用变量来保存当前选择的索引,我可以告诉单元格索引路径上的行哪个单元格应该获取图像,其他所有索引都获得默认值。当选择一行时,我会注意到当前所选行的新索引路径,然后告诉所有可见单元格自己重新加载。这会导致索引路径上的行的单元格重新绑定所有数据。