0

私のアプリケーションでは、配列を使用して tableView をロードし、必要に応じて各行にサブビューとして UIButton を追加しました。再利用されたセルにはボタンが追加されることがわかっているので、この事実を念頭に置いて、以下のように -cellForRowAtIndexPath メソッドを実装しました

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"surgeon"];
        if (!cell) {
            cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"surgeon"];
        }
        [[cell.contentView subviews] 
                  makeObjectsPerformSelector:@selector(removeFromSuperview)];
                             //before adding button to the contentView I've removed allSubViews
        UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
        [btn setFrame:CGRectMake(142, 4, 28, 28)];

        [btn setImage:[UIImage imageNamed:[NSString stringWithFormat:@"infoicon.png"]] forState:UIControlStateSelected];
        [btn setSelected:YES];
        [btn addTarget:self action:@selector(checkbtnClicked:) forControlEvents:UIControlEventTouchUpInside];
        [btn setTag:indexPath.row];

        if (indexPath.row==1) {
            NSLog(@"CELL %@ CONTNTVEW %@",cell.subviews,cell.contentView.subviews);
        }
        [cell.contentView addSubview:btn];
        return cell;
}

私の問題は、TableViewが最初にうまくロードされることですが、TableViewをスクロールすると、追加したボタンが削除されますが、サブビューとしてボタンを追加する前にサブビューの削除が行われますが、この作業を行うのに役立ちます

4

1 に答える 1

10

セルのコンテンツ ビューのすべてのサブビューを削除すると、テキストを設定したときにセルのコンテンツが再作成されるようです。私はなんとか問題を再現し、代わりにこの方法を使用して修正しました:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"surgeon"];
  if (!cell) {
    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"surgeon"];
  }
  for(UIView *subview in cell.contentView.subviews)
  {
    if([subview isKindOfClass: [UIButton class]])
    {
      [subview removeFromSuperview];
    }
  }

  //before adding button to the contentView I've removed allSubViews
  UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
  [btn setFrame:CGRectMake(142, 4, 28, 28)];

  [btn setImage:[UIImage imageNamed:[NSString stringWithFormat:@"infoicon.png"]] forState:UIControlStateSelected];
  [btn setSelected:YES];
  [btn addTarget:self action:@selector(checkbtnClicked:) forControlEvents:UIControlEventTouchUpInside];
  [btn setTag:indexPath.row];

  if (indexPath.row==1) {
    NSLog(@"CELL %@ CONTNTVEW %@",cell.subviews,cell.contentView.subviews);
  }
  cell.textLabel.font=[UIFont systemFontOfSize:12];
  cell.textLabel.text=@"A surgeon.";
  [cell.contentView addSubview:btn];
  return cell;
}

重要な注意: セルのカスタマイズをさらに行う予定がある場合は、ループ内でも手動で削除する必要があります。

于 2013-04-26T14:44:32.817 に答える