2012-04-12 4 views
0

forループを使用することを考えていますが、これを実現する方法があるかどうか疑問に思っていました。基本的に私はオブジェクトのリストを持つテーブルビューを持って、私は彼らが "チェック"彼らが望むだけ多くをクリックすることができます。彼らが次の文字列に行くとき、私は選択された名前で別のテーブルビューを設定したい。ここでアクセサリービューがオンになっているUITableViewの値を格納する最も効率的な方法

は、私の選択方法である:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


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

    if (cell.accessoryType == UITableViewCellAccessoryNone) 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    else 
     cell.accessoryType = UITableViewCellAccessoryNone; 

    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
} 

私は、テーブルビューがから引き出さのみを有するものを追加していることを、アレイ内の各値を通過するループのために含まれているメソッドを記述すると思っています新しいアクセサリへの正しいアクセサリタイプ。何か案は?

答えて

3

NSMutableIndexSetを使用して選択内容を戻すMVCが増えます。それ以外の場合は、ユーザーがセルを選択した後、セルからフレームをスクロールしてデキューするとどうなりますか?

あなたのインターフェイスでproperyを宣言します。あなたのcellForRowAtIndexPathで

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    if (![self.selected containsIndex:indexPath.row]) 
    { 
     [self.selected addIndex:indexPath.row]; 
    } 
    else 
    { 
     [self.selected removeIndex:indexPath.row]; 
    } 

    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
} 

を:メソッドは、するかどうかを決定

@property (strong) NSMutableIndexSet* selected; 

は、あなたのデリゲートメソッドで変更後のviewDidLoadまたは どこか似て、それをインスタンス化チェックマークを表示するかどうか:

cell.accessoryType = [self.selected containsIndex:indexPath.row] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

ここで選択したオブジェクトが必要な場合は、ちょうど

return [self.myObjects objectsAtIndexes:self.selected]; 

注:初めて投稿したときは、実際にはテストされていませんでした。私は以来、いくつかの変更を加えました。たとえば、cellForRowAtIndexPathにaccessoryTypeを設定したいとします。メソッドONLY

+0

私はコードをチェックしませんでしたが、このロジックは行く方法です。 –

+0

いくつかの項目を切り替える必要がありましたが、要点は100%正確です。ありがとう、トン! – Jerome

関連する問題