ios - 关于TableView cell 重用的问题, 滑动消失之前的数据
黄舟
黄舟 2017-04-17 15:08:21
[iOS讨论组]

代码如下

//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!
    }

正常情况如下

上下滑动 内容全部消失

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
阿神

问题出在这一行代码上:

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值之后不将其移除,而是一直保留在集合中。

阿神

可以去我博客看看,有几种解决方法 http://blog.csdn.net/winer888/article/details/50380183

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号