本文介绍了如何使用UItableViewCell reuseIdentifier的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 UITableviewCell 重复使用,我有一个自定义 UITableViewCell c> UITableViewCell 不同。我的代码是:

I want to use UITableviewCell reuse,I have a custom UITableViewCell and using ARC,my UITableViewCell is different . my code is:

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

PostCount *post=[listArr objectAtIndex:indexPath.row];

static NSString *CellIdentifier = @"TimeLineViewCell";

TimeLineViewCell *cell = (TimeLineViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell==nil){

    cell = [[TimeLineViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier11"];
}
cell.tag=indexPath.row+1000;
cell.lab_time.text=[ModelClass intervalSinceNow:post.when btime:0];
cell.delegate=self;
[cell setViewStyle:post];
post=nil;
return cell;
}

您知道我是否使用

cell = [[TimeLineViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] 


b $ b

instead

cell = [[TimeLineViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier11"]; 

我的单元格总是在错误的位置。为什么我无法使用相同的 reuseIdentifier 。如果我使用不同的reuseIdentifier,如果我的单元格不被重用。

My cell always at mistake location. Why am I not able to use the same reuseIdentifier. If I use a different reuseIdentifier,if my cell is not reuse.

对于其他Viewcontroller视图,当单元格的高度是相同的,我使用相同 reuseIdentifier 一切正常。

For other Viewcontroller views, when height of the cell is the same and I use the same reuseIdentifier everything is ok. Can anybody help me with the problem?

修改:我的自定义单元格代码:

My Custom cell code:

#import "TimeLineViewCell.h"

@implementation TimeLineViewCell



- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        imageView_t=[[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 40, 40)];
        imageView_t.hidden=YES;




        imageIcon=[[UIImageView alloc]initWithFrame:CGRectMake(295, 5, 16, 16)];




        self.lab_time = [[UILabel alloc] initWithFrame:CGRectMake(210, 5, 80, 20)];
        self.lab_time.textColor=[UIColor grayColor];
        self.lab_time.font=[UIFont systemFontOfSize:12];
        self.lab_time.textAlignment=UITextAlignmentRight;
        self.lab_time.backgroundColor=[UIColor clearColor];



        whoscreenName = [[UILabel alloc] initWithFrame:CGRectMake(60, 5, 145, 20)];
        whoscreenName.textColor=[UIColor blackColor];
        whoscreenName.font=[UIFont systemFontOfSize:18];
        whoscreenName.lineBreakMode = UILineBreakModeTailTruncation;
        whoscreenName.numberOfLines = 0;
        whoscreenName.backgroundColor=[UIColor clearColor];



        myWhat = [[UITextView alloc] init];
        myWhat.textColor=[UIColor blackColor];

        myWhat.backgroundColor=[UIColor clearColor];
        [myWhat setScrollEnabled:NO];
        [myWhat setEditable:NO];
        myWhat.dataDetectorTypes=UIDataDetectorTypeLink;
        [myWhat setCanCancelContentTouches:NO];


        self.myWhaticon=[[UIView alloc]init];



        myImageView=[[UIImageView alloc]init];
        myImageView.hidden=YES;




        myIndicatorView=[[UIActivityIndicatorView alloc ]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        myIndicatorView.hidden=YES;



        whoBgView=[[UIImageView alloc]init];

        whoBgView.image = [[UIImage imageNamed:@"timeline_rt_border_t.png"] stretchableImageWithLeftCapWidth:130 topCapHeight:7];




        whoWhat = [[UITextView alloc] init];
        whoWhat.textColor=[UIColor blackColor];

        whoWhat.backgroundColor=[UIColor clearColor];
        [whoWhat setScrollEnabled:NO];
        [whoWhat setEditable:NO];

        whoWhat.dataDetectorTypes=UIDataDetectorTypeLink;//url
        [whoWhat setCanCancelContentTouches:NO];



        whoImageView=[[UIImageView alloc]init];
        whoImageView.hidden=YES;

        activityIndicatorView=[[UIActivityIndicatorView alloc ]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

        activityIndicatorView.hidden=YES;



        myWhat.font=[UIFont systemFontOfSize:15];
        whoWhat.font=[UIFont systemFontOfSize:14];




    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


- (void)layoutSubviews
{
    [super layoutSubviews];

     [self addSubview:imageView_t];
    [self addSubview:imageIcon];
     [self addSubview: self.lab_time];
    [self addSubview:whoscreenName];
     [self addSubview:myWhat];
    [self addSubview:self.myWhaticon];
    [self addSubview:myImageView];
    [self addSubview:myIndicatorView]; 
    [self addSubview:whoBgView];

    [whoBgView addSubview:whoWhat];
    [whoBgView addSubview:whoImageView];
    [whoBgView addSubview: activityIndicatorView];


    whoImageView=nil;
    whoWhat=nil;
}

-(void)my_imag_btnClick:(UIButton *)btn{

    [self.delegate my_imag_btnClick:btn.tag];

}


-(void)who_imag_btnClick:(UIButton *)btn{
     NSLog(@"who_imag_btnClick");
    [self.delegate who_imag_btnClick:btn.tag];

}

- (void)dealloc
{
    imageView_t.image=nil;
    imageView_t=nil;

    imageIcon.image=nil;
    imageIcon=nil;

    whoscreenName=nil;

    self.lab_time=nil;
    whoscreenName=nil;
    myWhat=nil;

    self.myWhaticon=nil;
    myImageView.image=nil;
    myImageView=nil;

    whoBgView.image=nil;
    whoBgView=nil;

    whoImageView.image=nil;
    whoImageView=nil;

}

-(void)setViewStyle:(PostCount *)post{

    //时间
    if (self.btime==1) {
        self.lab_time.text=[ModelClass intervalSinceNow:post.when btime:1 ];
    }else{
        self.lab_time.text=[ModelClass intervalSinceNow:post.when btime:0];
    }

    imageView_t.hidden=NO;

    //     imageView_t.isRoundIcon=YES;
    imageView_t.layer.cornerRadius = 5;
    imageView_t.layer.masksToBounds = YES;
    //给图层添加一个有色边框
    imageView_t.layer.borderWidth = 0.8;
    imageView_t.layer.borderColor = [[UIColor colorWithRed:230.0/255 green:230.0/255 blue:230.0/255 alpha:1.0] CGColor];

    if(![GlobalVariable isBlankString:post.who.avatarbig])
    {


        [imageView_t setImageWithURL:[NSURL URLWithString:post.who.avatarbig]
                    placeholderImage:[UIImage imageNamed:@"default_user.png"]];

    }
    else{
        imageView_t.image=[UIImage imageNamed:@"default_user.png"];
    }



    //icon
    imageIcon.image=[UIImage imageNamed:[ModelClass returnimage_source:post.source]];
    whoscreenName.text=post.who.screenName;



    CGSize size_myWhat =[ModelClass heightForTextView:[UIFont systemFontOfSize:15] WithText:post.what weith:250];


    myWhat.frame=CGRectMake(50, 25, 250, size_myWhat.height);
    myWhat.text=[NSString stringWithFormat:@"%@",post.what];
    self.myWhaticon.frame=myWhat.frame;


    if(![GlobalVariable isBlankString:post.img_small])
    {

        CGSize size_myImageView=CGSizeMake(80, 80);

        myImageView.frame=CGRectMake(50, 30+size_myWhat.height, size_myImageView.width, 80);
        myImageView.hidden=NO;


        myIndicatorView.center=myImageView.center;
        myIndicatorView.hidden=NO;
        [myIndicatorView startAnimating];
        __block UIActivityIndicatorView *indicatorView=myIndicatorView;

        __block UIImageView *myImage = myImageView;
        [myImageView setImageWithURL:[NSURL URLWithString:post.img_small]
                    placeholderImage:nil
                             success:^(UIImage *image){

                                 CGRect  sFrame=myImage.frame;
                                 //缩放
                                 CGSize newSize=image.size;

                                 if (newSize.height>80) {
                                     newSize.height=80;
                                     newSize.width=newSize.width*80.0/image.size.height;

                                 }else{
                                     if (newSize.width>80) {
                                         newSize.height=newSize.height *80.0/image.size.width;
                                         newSize.width=80;
                                     }else{//2个都小于80
                                         newSize.height=newSize.height;
                                         newSize.width=newSize.width;

                                     }

                                 }
                                 sFrame.size=newSize;
                                 myImage.frame=sFrame;

                                 indicatorView.hidden=YES;
                                 [indicatorView stopAnimating];
                                 [indicatorView removeFromSuperview];
                             }
                             failure:^(NSError *error){
                                 indicatorView.hidden=YES;
                                 [indicatorView stopAnimating];
                                 [indicatorView removeFromSuperview];
                             }];


        UIButton * myImageBtn=[[UIButton alloc]init];
        myImageBtn.frame= CGRectMake(50, 30+size_myWhat.height, size_myImageView.width, 80);
        [myImageBtn addTarget:self action:@selector(my_imag_btnClick:) forControlEvents:UIControlEventTouchUpInside];
        myImageBtn.tag=self.tag-1000;
        //        myImageBtn.backgroundColor=[UIColor blueColor];
        [self addSubview:myImageBtn ];


    }


    if ([post.sourceTweet.what length]>0) {
        whoWhat.text=[NSString stringWithFormat:@"@%@: %@",post.sourceTweet.who.screenName,post.sourceTweet.what];

    }

    CGSize size_whoWhat =[ModelClass heightForTextView:[UIFont systemFontOfSize:14] WithText:whoWhat.text weith:250];

    whoWhat.frame=CGRectMake(10, 10, 250, size_whoWhat.height);


    if(![GlobalVariable isBlankString:post.sourceTweet.img_small])
    {

        CGSize size_whoImageView=CGSizeMake(80, 80);
        whoImageView.frame=CGRectMake(30, 15+size_whoWhat.height, size_whoImageView.width, 80);
        whoImageView.hidden=NO;

        activityIndicatorView.center=whoImageView.center;
        activityIndicatorView.hidden=NO;
        [activityIndicatorView startAnimating];
          __block UIActivityIndicatorView *indicatorView = activityIndicatorView;

        __block UIImageView *whoImage = whoImageView;


        [whoImageView setImageWithURL:[NSURL URLWithString:post.sourceTweet.img_small]
                     placeholderImage:nil
                              success:^(UIImage *image){

                                  CGRect  sFrame=whoImage.frame;
                                  //缩放
                                  CGSize newSize=image.size;

                                  if (newSize.height>80) {
                                      newSize.height=80;
                                      newSize.width=newSize.width*80.0/image.size.height;

                                  }else{
                                      if (newSize.width>80) {
                                          newSize.height=newSize.height *80.0/image.size.width;
                                          newSize.width=80;
                                      }else{//2个都小于80
                                          newSize.height=newSize.height;
                                          newSize.width=newSize.width;

                                      }

                                  }
                                  sFrame.size=newSize;
                                  whoImage.frame=sFrame;

                                  indicatorView.hidden=YES;
                                  [indicatorView stopAnimating];
                                  [indicatorView removeFromSuperview];

                              }
                              failure:^(NSError *error){
                                  indicatorView.hidden=YES;
                                  [indicatorView stopAnimating];
                                  [indicatorView removeFromSuperview];
                              }];

        UIButton * whoImageBtn=[[UIButton alloc]init];
        int myimageHeight=0;
        if (myImageView.frame.size.height>0) {
            myimageHeight=5+80;
        }
        whoImageBtn.frame=CGRectMake(30+42, 40+size_myWhat.height+size_whoWhat.height+myimageHeight, 80, 80);
        whoImageBtn.backgroundColor=[UIColor clearColor];
        [whoImageBtn addTarget:self action:@selector(who_imag_btnClick:) forControlEvents:UIControlEventTouchUpInside];
        whoImageBtn.tag=self.tag-1000;
        [self addSubview:whoImageBtn ];
    }



    if (size_whoWhat.height<20) {
        whoBgView.hidden=YES;
    }else{

        int myimageHeight=0;
        if (myImageView.frame.size.height>0) {
            myimageHeight=5+80;
        }

        whoBgView.frame=CGRectMake(42, 25+size_myWhat.height+myimageHeight, 270, 20+size_whoWhat.height+whoImageView.frame.size.height);

    }


}


@end


推荐答案

不要重用这些单元格,也不要给每个单元格自定义标识符。

Either don't reuse the cells, or give each one a custom identifier.

对于自定义标识符,请替换为:

For custom identifiers, replace this:

static NSString *CellIdentifier = @"TimeLineViewCell";

TimeLineViewCell *cell = (TimeLineViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell==nil){

    cell = [[TimeLineViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier11"];
}

TimeLineViewCell *cell = (TimeLineViewCell*)[tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];
if(cell==nil){
     cell = [[TimeLineViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];
}

否则,只是不要出队,并且每次创建一个新的单元格。

Otherwise, just don't dequeue, and create a new cell every time.

注意:基于单元格的indexPath.row的自定义标识符只有在用户没有编辑表格时才会工作。如果他们将编辑表格,请不要重复使用单元格。

Note: custom identifiers based on the cell's indexPath.row will only work if there is no table editing going on by the user. If they WILL edit the table, don't reuse the cells.

这篇关于如何使用UItableViewCell reuseIdentifier的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 22:18