2016-05-03 5 views
0

こんにちはGuysさんがiOS Appで働いていて、ユーザーのデータがUITableviewに表示されています。最初のユーザーにとってはうまく動作しますが、UIbuttonのようにクリックして次のユーザーデータを表示したい場合は、次のユーザーデータを表示する前に各ラベルに空の文字列を割り当てていますが、UITableviewCellは前のユーザーデータを消去しません。私のコードはここにありますUITableviewCellはデータをクリーニングしていませんか?

static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    UILabel *headLablel,*textLabel,*subLabel,*sharedActLbl; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    } 


    headLablel=[[UILabel alloc]init]; 
    headLablel.tag=11; 
    [cell.contentView addSubview:headLablel]; 
    textLabel=[[UILabel alloc]init]; 
    textLabel.tag=12; 
    [cell.contentView addSubview:textLabel]; 
    subLabel=[[UILabel alloc]init]; 
    subLabel.tag=13; 
    [cell.contentView addSubview:subLabel]; 

助けていただければ幸いです。ありがとう

+0

ドンサブビューを追加したり、カスタム 'UITableViewCell'を使い分けたり、手作業でそれを掃除したりしないでください(私の意見ではかなり醜いです)。 'UITableVIewCell'は**再利用されています**。 – Larme

+0

'cellForRowAtIndexPath'のセルにコンポーネントを追加する場合は、毎回このコンポーネントを削除して再ビルドする必要があります。 – jose920405

答えて

2

セルがデキューされるたびに、新しいサブビュー(headLableltextLabelsubLabel)を追加しています。これは間違っています。dequeueReusableCellWithIdentifierメソッドを呼び出すと、既に表示されていたセルが返されるからです。だから新しいサブビューを何度も追加するので、古いデータが残っているのです。

UITableViewCellをサブクラス化することをお勧めします。あなたがしたくない場合は

、あなたはこのようにあなたのコードを修正することができます:あなたがするたびに新しいラベルを作成しますので、

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

headLablel=[[UILabel alloc]init]; 
headLablel.tag=11; 
[cell.contentView addSubview:headLablel]; 
textLabel=[[UILabel alloc]init]; 
textLabel.tag=12; 
[cell.contentView addSubview:textLabel]; 
subLabel=[[UILabel alloc]init]; 
subLabel.tag=13; 
[cell.contentView addSubview:subLabel]; 

これは非効率的になります。

0

カスタムセルクラスを作成するときにサブビューを追加することもできます(initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier)。
異なるサブビューのセルを生成する場合は、異なるセルスタイルを設定することもできます。この方法では、tableViewがセルを再利用するときにアプリケーションのパフォーマンスを向上させることができます。

ハッピープログラミング!

0

- (のUITableViewCell *)のtableView:(のUITableView *)のtableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {静的NSStringの* MyIdentifier = @ "MyIdentifier"。 UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

UITableViewCellのコードの行作成のための細胞内
if(cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
} 
else{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
} 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
[cell.contentView clearsContextBeforeDrawing]; 

私のコードに置き換えて、それが仕事だチェックそれはブラケットだとあなたはその後、自動解放を解放していない場合..私はmannualリリースに取り組んできました。..

関連する問題