2012-05-08 16 views
0

UItablevewcellにlabelを追加すると、cellのcontentviewにnilと表示されます.nilでない場合は、 タグを使ってラベルを取得しています。これは、セルを再利用する正しい手順です。 しかし、私は2番目の行にそのラベルが欲しくないときは、私はそれを隠す必要があります。2番目の行のラベルを削除するにはどうすればいいですか? hiding.Iは最初の行に必要です。特定の行だけのcontentviewオブジェクトを削除しますか?

答えて

0

たとえば、デキュー時に異なるセル識別子を使用して作成することができます。 @ "ラベル付きセル"と@ "ラベルなしセル"など。

または、このラベルに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]; 
} 
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]; 

}