我有一个带有一堆自定义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)的单元格是我的自定义类的单元格。
答案 0 :(得分:1)
如评论中所述,当索引路径指向当前不在屏幕上的单元格时,UITableView.cellForRowAtIndexPath(_ indexPath: NSIndexPath)
会返回nil
。另请参阅official documentation。
您可以在表视图的数据源上调用它,而不是在表视图上调用该方法。 UITableViewDataSource.tableView(_ tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath)
是您必须实现的函数,无论索引路径是在屏幕上还是在屏幕外,它都应该返回一个正确的单元格。
然而,更好的方法(再次,如评论中所述)将从您的数据模型而不是单元格中获取单元格内容。