0

セルの contentview で nil の場合、UItablevewcell にラベルを追加します。nil でない場合は、割り当てずにタグを介してそのラベルを取得します。セルを再利用するのは正しい手順です。しかし、2行目にそのラベルが必要ない場合は、非表示にする必要があります。非表示にせずに2行目のラベルのみを削除するにはどうすればよいですか.1行目に必要です。

4

2 に答える 2

0

共通の要素を持たないセルを再利用する場合、再利用する前にセルのサブビュー (追加されたすべての要素) をクリアすることをお勧めします。

このようにして、必要に応じて毎回要素を追加できます...

あなたはこれを行うことができます:

    for(UIView *view in cell.contentView.subviews){
        [view removeFromSuperview];
    }

または、より派手にしたい場合:

    [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

もちろん、特定の行の特定の要素を 1 つだけクリアしたい場合は、セルの contentview に要素を追加するときに要素に一意のタグを割り当ててから、タグ値を介してアクセスして削除する必要があります。

それをセルに追加します。

UIImageView *rightArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];
rightArrow.tag = 111;
rightArrow.frame = CGRectMake(290, 16, 4, 8);
[cell.contentView addSubview:rightArrow];

行 2 のビューから削除します。

if (indexpath.row == 2) {
    UIImageView *rightArrow = (UIImageView *)[cell.contentView viewWithTag:111];
    if (rightArrow)
      [rightArrow removeFromSuperView];

}

于 2012-05-08T11:37:08.413 に答える
0

たとえば、デキュー時と作成時に異なるセル識別子を使用できます。たとえば、@"Cell With Label" と @"Cell Without Label" です。

または、このラベルにタグを付けてlabel.tag = MY_INT_TAG検索UILabel *label = [cell viewWithTag:MY_INT_TAG]し、2 行目のスーパー ビューから削除することもできます。UITableViewCell をサブクラス化したくない場合に機能します。

if (indexPath.row == 0) {
  UILabel *label = [[UILabel alloc] init];
  label.tag = TAG;
  [cell.contentView addSubview:label];
} else if (indexPath.row == 1) {
  UILabel *label = [cell.contentView viewWithTag:TAG];
  [label removeFromSuperView];
}
于 2012-05-08T11:34:51.770 に答える