关于TableView cell 重用的问题, 滑动消失之前的数据
代码如下
//swift 语言
//定义一个数组
var FaxianListC = [
0:["name":"123","img":"123"],
1:["name":"234","img":"123"],
2:["name":"456","img":"123"],
3:["name":"6567","img":"123"],
4:["name":"546","img":"123"],
5:["name":"546","img":"123"],
6:["name":"546","img":"123"],
7:["name":"546","img":"123"]
]
//实现
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
var cellid = "FaxianID"
var index = indexPath.row
var cell:UITableViewCell? = FaxianList.dequeueReusableCellWithIdentifier(cellid) as? UITableViewCell
if(cell == nil){
cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: cellid)
}
cell!.textLabel!.text = FaxianListC[index]?.removeValueForKey("name")
cell!.accessoryType = UITableViewCellAccessoryType.DetailButton
return cell!
}
正常情况如下
上下滑动 内容全部消失
貝阿朵莉切
9 years, 4 months ago
Answers
问题出在这一行代码上:
cell!.textLabel!.text = FaxianListC[index]?.removeValueForKey("name")
UITableView会根据reuseId来重用cell,意味着cell在结束显示后就可能被回收,而在重新显示时再恢复回来。所以,可以认为cell划出屏幕时,cell对象就被回收了,而被回收的cell又提供给了新出现的cell使用,所以cell.textLabel.text就会被新的值所覆盖。而题主的代码中在第一次显示第i行的cell时将第i行所对应的name移除了,在第i行的cell第二次被显示时就会得不到对应的name,所以滚动后cell.textLabel.text就为空了。
解决方案:
在取得cell对应的name值之后不将其移除,而是一直保留在集合中。
传说中的哥特
answered 9 years, 4 months ago