在TableView中调用最后一个单元格

时间:2016-12-08 21:43:00

标签: ios swift tableview

如果用户点击新单元格,我想更改最后一个单元格的图像。现在我这样做:

 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,因此无法正常工作。

3 个答案:

答案 0 :(得分:3)

您可以使用存储的IndexPath通过以下方式创建lastCell

IndexPath(row: self.lastCell, section: 0)

如果有多个部分,您只需要插入最后一部分而不是0

答案 1 :(得分:2)

为什么不在内存中保留IndexPath而不是Int?

您可以使用

从Int创建IndexPath
IndexPath(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)
    }
}

使用变量来保存当前选择的索引,我可以告诉单元格索引路径上的行哪个单元格应该获取图像,其他所有索引都获得默认值。当选择一行时,我会注意到当前所选行的新索引路径,然后告诉所有可见单元格自己重新加载。这会导致索引路径上的行的单元格重新绑定所有数据。