2011-08-03 7 views
0

私は5行の単純なtableViewを作成しました。セル上でUITableViewCellAccessoryCheckmarkを使用しました。アクションfrom UITableViewCellAccessoryCheckmark

私はボタンを押して、どのセルが「確認済み」で、何がそうでないかに基づいてアクションを実行したいと思います。ユーザーはnone、all、1などを選択できます。

どのセルがUITableViewCellAccessoryCheckmarkを使用しているか、どのセルがUITableViewCellAccessoryNoneを使用しているかを確認するにはどうすればよいですか?

おかげ

サム

EDIT!

私は小さな家の周りに、次の...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 

    NSUserDefaults *loginDefaults = [NSUserDefaults standardUserDefaults]; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) 
    { 
     oldCell.accessoryType = UITableViewCellAccessoryNone; 

    } else { 

     UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];  

     if (newCell.accessoryType == UITableViewCellAccessoryNone) 
     { 
      newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
    } 

    if ([oldCell.textLabel.text isEqualToString:@"All"]) { 

     if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) { 

      [loginDefaults setObject:@"YES" forKey:@"DownloadAll"]; 

     } else if (oldCell.accessoryType == UITableViewCellAccessoryNone) { 

      [loginDefaults setObject:@"NO" forKey:@"DownloadAll"]; 
     } 

    } else if 

をしましたが、私は唯一の私のテーブルに5つの事項を持っているようdidSelectRowAtIndexPathで...

をこれを行う方法を見つけました私はそれが欲しいもののためにうまくいきます。

今のアクションで、私は要素がチェックされている情報は、お使いのモデルに属しているものです

答えて

0

応じNSUserDefaultsと仕事の値を確認してください。テーブルセルはスクロール時に再利用されるため、テーブル自体に格納する方法はありません。いつでも、画面上に表示されるよりも1つまたは2つ多くのセルがメモリ内に存在するためです。

したがって、モデルオブジェクトにプロパティを追加し、セルがタップされたときにそれを更新することをお勧めします。これにより、モデル上で好きなようにフィルタリングやクエリを行うことができ、UI要素に状態を格納させることなく、設計上信頼性の高い状態にすることができます。

とにかくしようとすると、セルインスタンスが再利用されるため、予期しなかった行にチェックマークが表示されるなど、奇妙な状況が発生します。

質問Question 3240830も参照してください。これはかなり似ています。

関連する問題