2011-12-29 15 views
1

テーブルビューに50以上の行があります。私が50番目のセルを見なければならない場合は、私は下にスクロールする必要があります。私はまた、私のテーブルに複数の選択を有効にしました。問題は、5行のようなものを選択した後にスクロールして、選択した他の行(選択しなかった行、さらに下にスクロールすると自動的に選択された行)を取得することです。セル行複数選択

1.)これをどのように克服しますか?

マイcellForRowAtIndexPath方法

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

    [email protected]"Text values"; 
} 

マイdidSelectRowAtIndexPath方法

UITableViewCell *cell = [self.tble cellForRowAtIndexPath:indexPath]; 

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 

} 

2)私は私のdidSelectRowAtIndexPath作品は正しく(中には、複数の行選択を許可するように)誰かが私がこれを解決するのに役立つことができるかどうかわかりません

答えて

2

セルアクセサリビューを設定して選択内容を保存しています。選択したセルを再利用すると、アクセサリビューはリセットされません。アクセサリビューをcellForRowAtIndexPathにも設定または解除する必要があります(インデックスパスがテーブルビューの選択(indexPathsForSelectedRows)の一部である場合は設定し、そうでない場合は設定解除します)。

また、あなたは... didSelectで簡単に切り替えてもcellForRowに何を表示するか、アクセサリビューを知ることができますので、それが参考に、あなたのデータモデルの一部として選択された状態を保存するために見つけることがあります...

1

あなたの問題は、あなたが細胞を再利用しているので、細胞がチェックマークを表示することです。それらを「クリーンアップ」しなければ...あなたが何をすることができるかは、どの細胞がチェックされ、それらが欲しい、次にインデックスパスの行のセルにチェックを入れるかどうかを設定する必要があります。例えば、

didSelectRowAtIndexPathのように見えます。

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    [_array insertObject:[NSNumber numberWithInt:1] atIndex:indexPath.row]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
[_array insertObject:[NSNumber numberWithInt:0] atIndex:indexPath.row]; 
} 

その後、cellForRowAtIndexPathにあなたは//あなたが `意味cell`をチェック`言って

BOOL checked=[[_array objectAtIndex:indexPath.row] boolValue]; 
    if(checked) 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
} 
else 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
} 

はそれが

+0

役に立てば幸い行うことができます(セル== nilを){ セル= [[場合UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; ?? cell.textLabel.text = @ "テキスト値"; は} ' – sharon

+0

はありません、私は付属のマークを追加したいとちょうどそれが強調表示させたくない場合は – Daniel

+0

何hapenceをチェックマークするアクセサリーマークをseetting意味します。とにかく私はこれを行うことができますか? – sharon

関連する問題