这是非常奇怪的行为。首次加载表视图时,它看起来像这样:
现在,当我向下滚动然后向上滚动时,按钮会显示在之前没有按钮的单元格上!像这样:
我知道这与“这是UITableView的预期行为有关.UITableView的重点是排队所需的单元格并释放不需要管理内存的单元格”,如下所述发布:UITableView in Swift: Offscreen cells are not pre-loaded。
这是我的代码:
var messages = [String]()
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CathyTaskLogTableViewCell
if messages[indexPath.row] != "" {
cell.messageButton.hidden = false
}
return cell
}
有人能解决这个问题吗?
答案 0 :(得分:1)
获得此结果的原因是因为UITableViewCell
正在重复使用。
if messages[indexPath.row] != "" {
cell.messageButton.hidden = false
}
else
{
cell.messageButton.hidden = true
}
答案 1 :(得分:0)
您的问题有两种可能的解决方案:
始终设置hidden
属性:
cell.messageButton.hidden = messages[indexPath.row] != ""
在重用时重置单元的状态,这在表视图控制器中提供了确定性行为,而不会给控制器类增加单元应该执行的任务的负担。这可以通过覆盖prepareForReuse
中的CathyTaskLogTableViewCell
来完成。
func prepareForReuse() {
super.prepareForReuse()
self.messageButton.hidden = true // or false, depending on what's the initial state
// other stuff that needs reset
}
使用当前代码时,messageButton
只有在单元格在messages
中找不到内容时才会被隐藏。因此,对于具有此按钮可见,已重复使用的单元格,现在对应于messages
中没有对应单元格的单元格,该按钮将保持可见。