【发布时间】:2016-08-15 19:35:18
【问题描述】:
我有一个需要通过委托调用更新的表视图控制器。我已经设置了数据源和委托,并且在 tableview 的初始加载时,一切都按预期工作。我有一个在数据源更新后调用的委托方法。委托调用表视图控制器类中的刷新方法,该方法调用 .reloadData()
调用 reloadData 时,会调用 numberOfRowsInSection 并准确地返回行数,但永远不会调用 cellForRowAtIndexPath。
在这种特殊情况下,numberOfRowsInSection 返回 2,因此应该调用 cellForRowAtIndexPath 两次,但调用次数为零。
在初始加载时一切正常。只有在调用 reloadData 时才会忽略 cellForRowAtIndexPath。我在 Obj-C 中多次做过同样的事情,没有任何奇怪之处。在 Swift 中是否存在任何已知问题?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(LayerMenuCell.reuseId) as! LayerMenuCell
// ....
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(layerEntries?.count)
return (layerEntries?.count)!
}
func refresh() {
self.layersTableView.reloadData()
}
谢谢!
【问题讨论】:
-
可以分享代码吗?
-
代码见帖子。当调用 reloadData 时,代码永远不会进入 cellForRow...,即使 numberOfRowsInSections 返回一个不为零的准确数字
-
如果重新加载表不起作用,请尝试调用 relaodROws / 重新加载部分并查看是否调用了 cellFor 行。如果 number 或 rows 被调用,那么 row shud 的单元格也会被调用。
-
你在主线程上执行
reloadData调用吗? -
michi - 感谢您仔细阅读我的问题。在我的问题中,我说数据源/委托是绝对设置的。这是一个线程问题,在主线程上调用 reloadData 就是答案。您可以发表您的评论作为答案吗?
标签: ios swift uitableview