我创建了一个包含所有UITableView协议方法的类。我在ViewController中成功使用它,在其场景中有一个tableview。
将所有tableview代码放在不同的类中的优点是我应该能够单元测试tableview方法。我遇到的问题是,当我致电cellForRow(at:)
时,它会返回一个nil
单元格。
我可以在tableview类cellForRow(at:)
中放置一个断点,并在它return cell
之前看到该单元格有效。一旦我离开cellForRow(at:)
并返回单元测试,返回的单元格就是零。
这是因为没有任何单元格可见。此线程[Table view's `cellForRow(at:)` is `nil` in Unit Test]会遇到问题但不能解决此特定情况。
当tableview / cells不可见时,是否有某种方法可以从cellForRow(at:)
返回单元格?
答案 0 :(得分:2)
您的假设是正确的,UITableView.cellForRow(at:)
方法如果在那一刻不可见,则不返回单元格。
同时为什么不使用UITableView的数据源并调用UITableViewDataSource.tableView(_:cellForRowAt:)
?我认为它完全符合您的需要,并返回单元格而忽略实际的UITableView
位置。
答案 1 :(得分:0)
UITableViewCell将在委托/ \ : * ? " < > |
中处理外观计算,因此您可能需要获取不确定的单元格。
我最近遇到了这个问题,我的解决方法是:
在此文件或另一个文件中定义一个全局变量(二维数组):
tableView(_:cellForRowAt:)
然后添加
class ThisTableCell
{
static var cells = [UITableViewCell](repeating: [UITableViewCell](repeating: UITableViewCell(), count: sectionCount), count: rowCount)
}
该代表中的。
然后您可以输入ThisTableCell.cells[indexPath.section][indexPath.row] = cell
来获取当前的单元格。