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