2011-08-11 7 views
0

私はUitableViewCellに関する問題があります。問題は、私はカスタムセルを作成し、そのセルにチェックボックスのイメージボタンがあることです。私はそれをチェックし、チェックを外す。それはうまく動作しますが、問題は、行#1を選択すると行#10も同じようになります。行2を選択すると、行11が自動的に選択されます。一度に10行表示しています。ここカスタムセルでのuitableviewcellの二重選択

はCellForIndexPath

static NSString *cellIdentifier = @"Cell"; 
InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (cell==nil) { 
    NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil]; 
    cell = [arrayNibs objectAtIndex:0]; 
    cell.delegate = self; 
    cell.total = [dataArray count]; 
} 

cell.tag = indexPath.row; 

cell.lblTitle.text = [dataArray objectAtIndex:indexPath.row]; 

if (indexPath.row==0) { 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_top_default.png"]; 
}else if(indexPath.row == [dataArray count]-1){ 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_bottom_default.png"]; 
}else{ 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_middle_default.png"]; 
} 

return cell; 

ための私のコードでプラス私は(私は背景として、他のイメージを持っている)、背景画像を変更することができるように、私はタッチを検出しています。 Touch用のコード始めました(カスタムセルに以下の通りです)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
//NSLog(@"%i",tag); 
isSelected = !isSelected; 

btnTickMark.selected = !btnTickMark.selected; 
(isSelected ? (onImage = YES) : (onImage = NO)); 

誰かが私が行をクリックしたときに、なぜ2行が選択されていることを、この問題で私を助けることができます。

ありがとうございます。

答えて

2

これは、UITableViewがセルをデキューするためです。行1からデキューされると、行11がチェックされて表示されます。

tableView:cellForRowAtIndexPath:にチェックを入れて、各セルのチェックパラメータを設定する必要があります。すべてのセルに設定したテキストのように。

NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil]; 
for (id currentObject in arrayNibs){ 
    if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
     cell = (InterestsTableViewCell *) currentObject; 
     cell.Delegate = self; 
     cell.total = [dataArray count]; 
     break; 
    } 
} 

を、これはあなたのために働くなら、私に知らせて:

+0

どのような種類の小切手がわかるのですか?私は理解できません – chsab420

+0

「小切手」ではif節を意味します。私はあなたがどこかのセルのチェックされた、またはチェックされていない状態を保存していると思いますか?おそらくInterestsTableViewCellで直接またはあなたのdataArrayにあります。だから、 "cell.lblTitle.text = [dataArray ..."でセルのテキストを設定するのと同様に、すべてのセルに対してチェックされた状態またはチェックされていない状態を設定する必要があります。 –

+0

ありがとう、私はそれをやった。もう一度多くのありがとう。 – chsab420

0

これを試してみてください。

+0

私は提供されたソリューションを試しましたが、それはまったく助けませんでした。これまでと同じです。 – chsab420

0

クイックフィックス -

InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

InterestsTableViewCell *cell = nil; 

へのないあなたは、細胞を再利用されることはありませんので、メモリ/効率の観点から良いが、代わりに1を再ロードされますから、この行を変更Florian Mielkeが言っていることが正しいかどうかを示します(彼の推薦された方法は長期的にはより良い解決策を提供します)。

+0

私はこのようにしましたが、現在はダブルセルを選択していませんが、問題はスクロールすると画像が元の画像、つまりそのセルを選択しても未チェックの画像に戻ります。あなたはこの中で私をより多く導くことができます – chsab420

+0

助けてくれてありがとう、あなたが与えたヒントについて知っていることは非常に良い、ありがとう – chsab420

関連する問題