2012-03-06 9 views
0

セルにラベルが含まれている表があります。再使用可能なセルをデキューすると、古いラベルはまだ残っています。再利用可能な表のセルにラベルが残っています

for(int a=[[newcell subviews]count]-1; a>=0;a--) 
    { 
     if([[[[newcell subviews]objectAtIndex:a]class] isSubclassOfClass:[UILabel class]]) 
     { 
      [[[newcell subviews] objectAtIndex:a] removeFromSuperview]; 
     } 
    } 

しかし、私がセルを選択すると、新しいテキストの上に古いテキストが表示されます。私はこれを試しました:

[[newcell.selectedBackgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 
    [[newcell.backgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 

しかし、それは動作しませんでした。選択したセルやセルの通常のビューから古いラベルを消すにはどうすればよいですか?

+0

さらにコードを投稿してください。 – stephenmuss

+0

どのように細胞を作りますか? – mattjgalloway

答えて

1

この種の問題は、デキューか新規に作成されたかにかかわらず、サブビューをcellForRowAtIndexPath:にセルに追加すると発生する傾向があります。その結果、行が再利用されるたびに新しいサブビューが作成され、古いサブビューが蓄積されます。

代わりに、毎回同じサブビューを使用するだけで、毎回関連する属性(ラベルや色など)を設定するだけです。可能なアプローチを確認するには、How do I clear a cell completely when I reuse it?への回答を確認してください。

+0

これは私にとっては問題でした(プログラムによって追加されたビューでIBOutletsとしてではなく)ビューで、UITableViewCellのawakeFromNibでcontentView.addSubviewを呼び出して修正できました。 cellForRowAtIndexPathに必要なセル – RanLearns

2

サブクラスUITableViewCell(まだ表示されていない場合)。 prepareForReuseをオーバーライドし、そこのラベルを削除します。

+0

prepareForReuseが私の問題を解決しました! – user523234

0

私はちょっと考えてくれました。各繰り返しで新しいラベルを入れるのではなく、セルにラベルが含まれているかどうかを確認し、ラベルがある場合はラベルを編集するか、そうでない場合はラベルを編集します。コードは次のようになります。

if([[newcell.contentView subviews] count]>=2 && [[[[newcell.contentView subviews] objectAtIndex:0]class] isSubclassOfClass:[UILabel class]] && 
    [[[[newcell.contentView subviews] objectAtIndex:1]class] isSubclassOfClass:[UILabel class]]) 
{ 
    //change the text of the labels 
} 
else 
{ 
    //add the labels to the cell 
} 
関連する問題