我有一个问题。
我有一个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])
}
}
答案 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)