美文网首页
关于cell复用

关于cell复用

作者: nieying213 | 来源:发表于2017-03-02 11:24 被阅读0次

    在TripRepeatCell.m文件中

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

    self= [superinitWithStyle:stylereuseIdentifier:reuseIdentifier];

    if(self){

    self.contentView.backgroundColor=UIColorFromRGB(0xffffff);

    self.selectionStyle=UITableViewCellSelectionStyleNone;

    self.backgroundColor= [UIColorclearColor];

    self.weekLabel= [[UILabelalloc]initWithFrame:CGRectMake(0.0,0.0,150.0,45.0)];

    self.weekLabel.font= [UIFontboldSystemFontOfSize:15.0];

    self.weekLabel.textColor=UIColorFromRGB(0x333333);

    [self.contentViewaddSubview:self.weekLabel];

    //分割线

    self.lineView= [[UIViewalloc]initWithFrame:CGRectMake(0.0,0.0,IPHONE_SCREEN_WIDTH,1.0)];

    self.lineView.backgroundColor=UIColorFromRGB(0xdbdbdb);

    [self.contentViewaddSubview:self.lineView];

    }

    returnself;

    }

    -(void)update{

    self.weekLabel.left=15.0f;

    self.lineView.left=15.0f;

    }

    -(void)reset{

    self.selectIcon.image=nil;

    self.weekLabel.left=0.0f;

    self.lineView.left=0.0f;

    }在TripRepeatPage.m文件中

    假设tableview只有一组section ,4个cell

    - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

    //正在进行的cel

    NSString* identify =NSStringFromClass([BMTHTripRepeatCellclass]);

    BMTHTripRepeatCell* cell = [tableViewdequeueReusableCellWithIdentifier:identify];

    if(!cell) {

    cell = [[TripRepeatCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identify];

    }

    //[cellreset];

    NSString*string = array[indexPath.row];

    cell.weekLabel.text = string;

    //如果我们只需要在第三个cell,weekLabel的位置像距左15像素

    if(indexPath.row == 2){

    [cell update];

    }

    如果这样的话,从第三个cell开始,weekLabel的位置都会距左15像素,因为cell是采用的是复用机制,cell的initWithStyle方法只执行一次,从第三个cell中的weekLabel位置距左15像素,那么,第四个cell复用这个cell,也会有同样的效果,为了防止cell复用引发的这一问题,所以在cellForRowAtIndexPath的方法中,要添加一个重置方法[cell reset],让使用的每个cell都保存初始化的状态。

    if(!cell) {

    cell = [[TripRepeatCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identify];

    }

    [cell reset];

    相关文章

      网友评论

          本文标题:关于cell复用

          本文链接:https://www.haomeiwen.com/subject/djhflttx.html