为什么tagview在tableview中更改为重用单元格

5 sqlite iphone xcode ipad

我正在创建自定义单元格包含UILabel,UIImageView使用常量标记UILabel,UIImageView使用动态标记,表格有11个单元格,前7个单元格正确加载,8,9,10,11单元格图像视图在我更改1,2时更改,3,4,单元格分别在表格中,单元格中的标签也一样,我使用图片复选框表,UITapGestureRecognizer用于更改表格中的imageview,

我正在使用此代码.....

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

    static NSString *CellIdentifier =@"Cell";
    UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:CellIdentifier];


    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
        cell.selectionStyle=UITableViewCellSelectionStyleGray;
        cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
        UIImageView *imageview=[[UIImageView alloc]initWithFrame:CGRectMake(5, 12, 20, 20)];
        imageview.tag=n;
        [cell.contentView addSubview:imageview]; 
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tabimage:)];
        imageview.userInteractionEnabled=YES;
        [imageview addGestureRecognizer:tap];
        imageview.image=[UIImage imageNamed:@"img1.jpeg"];

        UILabel *titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 2, 260,26)];
        titleLabel.tag=222;
        titleLabel.backgroundColor=[UIColor clearColor];
        [cell.contentView addSubview:titleLabel];

        UILabel *dateLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, 31, 260, 13)];
        dateLabel.tag=333;
        dateLabel.font=[UIFont systemFontOfSize:10];
        dateLabel.backgroundColor=[UIColor clearColor];
         [cell.contentView addSubview:dateLabel];
    }
    UIImageView *imageview1=(UIImageView*)[cell.contentView viewWithTag:n];
    if([array containsObject:[NSNumber numberWithInt:imageview1.tag]]) {
       imageview1.image=[UIImage imageNamed:@"img2.jpeg"];  
    } else {
       imageview1.image=[UIImage imageNamed:@"img1.jpeg"];   
    }

    UILabel *titlelable=(UILabel*)[cell.contentView viewWithTag:222];
    titlelable.text=[task objectAtIndex:indexPath.section];
    NSLog(@"%i",indexPath.section);

    UILabel *dateLabel=(UILabel*)[cell.contentView viewWithTag:333];
    dateLabel.text=[date objectAtIndex:indexPath.section];
    n++;
    return  cell;
}

- (void)tabimage:(id)sender {
    UIImageView *iv=(UIImageView *)[sender view];
    int i=iv.tag;
    NSLog(@"------------%i",i);
   if (iv.image==[UIImage imageNamed:@"img1.jpeg"]) {
       iv.image= [UIImage imageNamed:@"img2.jpeg"];
       [array addObject:[NSNumber numberWithInt:i]];
   } else {
      iv.image= [UIImage imageNamed:@"img1.jpeg"];  
      [array removeObject:[NSNumber numberWithInt:i]];
    }
  }
Run Code Online (Sandbox Code Playgroud)

She*_*pta 8

您应该将单元格标识符从静态更改为动态,以解决您的问题.

你应该替换它

static NSString *CellIdentifier =@"Cell";
UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:CellIdentifier];
Run Code Online (Sandbox Code Playgroud)

有了这个

UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%d %d"], indexPath.row, indexPath.section];
Run Code Online (Sandbox Code Playgroud)


小智 2

我正在为我的应用程序获取解决方案,

在我的代码中使用动态单元格标识符

NSString *CellIdentifier =[NSString stringWithFormat:@"%i-%i", indexPath.section,indexPath.row];
Run Code Online (Sandbox Code Playgroud)