我有一个UITableView,它的单元格可能会根据每个单元格上显示的数据而有所不同,所以我有两个可重复使用的单元格,UIPendingXOCell
和UIXOCell
。在某些时候,每UIPendingXOCell
成为UIXOCell
。
请参阅下面的代码了解一些背景信息:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var xoItem = self.xoForIndexPath(indexPath)
var xoItemPFObject = xoItem.pfObject
// If it's a pending XO
if xoItemPFObject.objectId == nil {
var cellIdentifier = "cell-pending-xo-list"
var cell: UIPendingXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIPendingXOCell!
...
return cell
}
else {
var cellIdentifier = "cell-xo-list"
var cell: UIXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIXOCell!
...
return cell
}
}
示例:我有一个包含5个对象的列表,在调用.reloadData()
时生成1 UIPendingXOCell
和4 UIXOCell
(一切正常)。我还在后台运行了一个动作,它改变了对象的方式,当我再次呼叫.reloadData()
时,它们都变为UIXOCell
(再次正常,cellForRowAtIndexPath
被调用并且掉落进入else
区块)。
我的问题是,调用cellForRowAtIndexPath
后大约需要10秒才能将单元格渲染为UIXOCell
而不是UIPendingXOCell
。
以前有人有这个问题吗?如果是这样,我该如何解决?
谢谢!
答案 0 :(得分:10)
听起来好像你没有从主线程(UI线程)调用reloadData
。确保从主线程更新UI。
dispatch_async(dispatch_get_main_queue()) {
tableView.reloadData()
}