在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];
网友评论