2012-03-30 10 views
0

私はUITableViewsでいっぱいのUINavigationControllerを持っており、私はこれらのうちの特定のものでカスタムセルを使用しています。UITableViewセルのラベルの複製

tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathでは私はそれがラベルを複製、私はその後、詳細ビューに行けばしかし、当時返し、[cell addSubview:label];

これは素晴らしい作品でUILabelを追加します。どうすればこれをやめることができますか?

ありがとうございました。

+0

「cellForRowAtIndexPath:」のコードを投稿してください。私たちが読むことのできないコードを修正するにはどうすればいいですか? – Sam

答えて

3

問題は、セルが再利用され再表示されるたびに新しいラベルを追加することです。

カスタムセルを既に使用しているので、最も簡単な解決策はセルにUILabelというプロパティを付け、その都度新しいラベルを追加するのではなく、そのセルを使用することです。具体的には、セルをリサイクルする代わりにセルを作成する場合にのみ、新しいラベルを追加する必要があります。または、プロパティがnilの場合にのみ、新しいUILabelを追加できます。

+0

私は毎回新しいラベルを宣言していません。自分のカスタムセルクラスのラベルのためのプロパティを持っていて、やっています。 –

+0

次に、毎回サブビューとして追加するのはなぜですか? – yuji

+0

サブビューとして追加しないと、表示されないためです。私はそれを宣言し、それを私のカスタムクラスのプロパティに与えました。それが、何が起こっているのかわからない理由です。 –

0

は、それが

UILabel *label;  
if ([cell viewWithTag:2]){ 
    label = [cell viewWithTag:2];} 
else{ 
    label = [[UILabel alloc]init];label.tag = 2;} 
1

それとも条件付きセルの作成の内側にラベルを追加することを確認し、カスタムクラスにラベルを追加することに代わるものとして存在するかどうかを確認、その後、ラベルにタグを追加します。例えば

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:ident]; 

if(cell == nil){ 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease]; 
    [cell.contentView addSubview:[[[UILabel alloc] init] autorelease]]; // <------- 
}