UITableView didSelectRowAt无法获取我的单元格

时间:2018-12-28 01:53:55

标签: ios swift uitableview

我有一个问题。 我有一个UITableView和四个自定义UITableViewCells。
当我滚动到底部时,也无法在didSelectRowAt函数中获得自定义UITableViewCell。
请给我一些建议。
谢谢。

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

    if let cell: ChartTableViewCell = customTableview.cellForRow(at: IndexPath(row: 0, section: 0)) as? ChartTableViewCell {
        printBBLog("here.") //just When I scrolled to bottom, this don't print.
        let colors = AssetViewController.Color.getAllColors()
        cell.barChartView?.tapIndexWithColor(index: indexPath.row-2, color: colors[indexPath.row-2])
    }

}

3 个答案:

答案 0 :(得分:3)

当请求的单元格当前在屏幕上不可见时,

cellForRow(at:)将返回nil。当表格视图滚动到底部时,第0行很可能不可见。

但是,您的if语句正在执行它的工作;如果cellForRow(at:)返回nil,则您没有要更新的单元格,因此您无需在该函数中执行任何操作。

下一次在cellForRow(at:)数据源方法中将第0行单元格出队时,应设置其外观。

而且,正如@Bappaditya所指出的那样,您有indexPath.row-2的潜在违反边界崩溃的情况

答案 1 :(得分:0)

要在您的didSelectRowAt委托方法中获取单元格,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = tableView.indexPathForSelectedRow()
    let cell = tableView.cellForRow(at: indexPath) as! ChartTableViewCell
    let colors = AssetViewController.Color.getAllColors()
    cell.barChartView?.tapIndexWithColor(index: indexPath.row-2, color: colors[indexPath.row-2])
}

要保持表格视图位于顶部,您可能要使用

scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)

答案 2 :(得分:0)

enter image description here

在UITableView dequeueReusableCell中-每个UITableViewCell将与不同的数据(图像)重复使用多次。
对于您的情况,当您滚动到底部时,IndexPath(row: 0, section: 0)处的单元格已由位于底部的另一个单元格重用,因此您无法配置该单元格。 尝试控制cellForRowAtIndexpath

中的数据