博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于tableView的cell复用问题
阅读量:7106 次
发布时间:2019-06-28

本文共 2096 字,大约阅读时间需要 6 分钟。

1.项目场景:自定义cell上有一个加入收藏的button,点击button即加入收藏,同时button变为选中状态,变为选中状态时的图片。

2.在你按照正常的思路来写时会发现出现的cell的重用问题。

3.解决方案:我们需要知道3点问题

>1.我们cell上显示数据都是来自于模型,这一点我们通过下面的代码来了解一下

- (void)setModel:(CLNewsModel *)model

{
    _model = model;
    self.dataLable.text = [self.model.sdate substringWithRange:NSMakeRange(5, 5)];
    self.stitleLable.text = self.model.stitle;
    [self.iconView sd_setImageWithURL:[NSURL URLWithString:self.model.imgsrc] placeholderImage:[UIImage imageNamed:@"1"]];
}
如果你已经入门,上面的代码你应该能看懂了,这段代码封装在自定义cell内部。我们想让cell显示button的选中和正常的状态,就需要这么来写代码(需求推动开发)

- (void)setModel:(CLNewsModel *)model

{
    _model = model;
    self.favriteBtn.selected = self.model.isSelected;  // 收藏按钮到底是什么状态由模型的isSelected属性来决定,所以在模型中需要定义一个isSelected属性
    self.dataLable.text = [self.model.sdate substringWithRange:NSMakeRange(5, 5)];
    self.stitleLable.text = self.model.stitle;
    [self.iconView sd_setImageWithURL:[NSURL URLWithString:self.model.imgsrc] placeholderImage:[UIImage imageNamed:@"1"]];
}

>2.点击了收藏按钮,收藏按钮变为选中状态,同时监听按钮的点击

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {       
        self.dataLable = [[UILabel alloc] initWithFrame:CGRectMake(iconX+iconW+magin, 50, 100, 20)];
        self.dataLable.font = [UIFont systemFontOfSize:12];
        [self.contentView addSubview:self.dataLable];
        
        self.favriteBtn = [[UIButton alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width-40, 50, 20, 20)];
        [self.favriteBtn setBackgroundImage:[UIImage imageNamed:@"funSelected"] forState:UIControlStateNormal];
        [self.favriteBtn setBackgroundImage:[UIImage imageNamed:@"fun"] forState:UIControlStateSelected];
        [self.favriteBtn addTarget:self action:@selector(clickFav:) forControlEvents:UIControlEventTouchUpInside];
        [self.contentView addSubview:self.favriteBtn];
    }
    return self;
}
// 点击了收藏
- (void)clickFav:(UIButton *)btn
{
    self.model.isSelected = YES;
    [self.delegate clickFavMakeTableViewReloadData];  // 这是一个代理方法,主要的作用就是刷新tableView。控制器实现该方法,刷新一下tableView即可
}

 

 

移动端热门技术交流群170229489

转载于:https://www.cnblogs.com/darren-chen/p/5155456.html

你可能感兴趣的文章
bzoj1655[Usaco2006 Jan] Dollar Dayz 奶牛商店*
查看>>
主机不能访问虚拟机web服务的问题
查看>>
20145220&20145209&20145309信息安全系统设计基础实验报告(5)
查看>>
初识django之orm布置与增删改查
查看>>
步入正轨——以客户的视角审视软件交付
查看>>
关于数组数据容易忽略的点
查看>>
小程序: 在同一个文件夹中配置多个页面
查看>>
NLPIR-Parser智能系统文本挖掘的“挖掘机”
查看>>
GitHub上传项目到远程库
查看>>
格式化字符串
查看>>
实验五 函数程序设计
查看>>
ubuntu下lnmp的安装
查看>>
高斯消元
查看>>
关于正则表达式的一些实际应用
查看>>
Windows 建立链接
查看>>
JavaScript进行DOM操作时的一点点小经验
查看>>
Android获取手机应用
查看>>
Weblogic12c安装与配置详解
查看>>
结对-英文词频检测-结对项目总结
查看>>
php随机生成汉字
查看>>