首页 > 其他 > 详细

关于tableView的cell复用问题

时间:2016-01-24 18:23:43      阅读:224      评论:0      收藏:0      [点我收藏+]

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即可
}

关于tableView的cell复用问题

原文:http://www.cnblogs.com/darren-chen/p/5155456.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!