关于cell复用

在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复用)