我有一堆自定义tableViewCells tableView。我有一个按钮,允许用户在tableview的底部添加一个新单元格。我希望此新单元格显示一些数据,具体取决于其上方单元格中显示的数据。因此,在我的tableView(cellForRowAtIndexPath)委托方法中,我为上一行调用tableView.cellForRowAtIndexPath并将结果转换为我的自定义单元格。但是,这会导致崩溃。

if (indexPath.row > 0) {
    let previousCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: indexPath.row - 1, inSection: indexPath.section)) as! myCustomCell
}

有趣的是,如果我不强制转换,它也不会崩溃。但是,这对我没有用,因为我需要强制强制转换并访问某些仅在自定义类中存在的属性。我确定(indexPath.row-1)的单元格是我的自定义类的单元格。

最佳答案

如注释中所述,当索引路径指向当前不在屏幕上的单元格时,UITableView.cellForRowAtIndexPath(_ indexPath: NSIndexPath)返回nil。另请参见official documentation

您可以在表视图的数据源上调用该方法,而不是在表视图上调用该方法。 UITableViewDataSource.tableView(_ tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath)是您必须实现的函数,并且无论索引路径是在屏幕上还是在屏幕外,它都应返回适当的单元格。

但是,更好的方法(再次如注释中所述)将是从数据模型而不是单元格中获取单元格内容。

10-04 22:22
查看更多