0

カスタム UITableViewCell のチェックボックスに問題があります。チェックボックスをタッチすると、画像が変わり ("checked.png"-->"unchecked.png" と "unchacked.png"-->"checked.png")、値が DB (SQLLite) に保存されます。問題は、「チェック済み」のチェックボックスがあるビューに入ってタッチすると、画像が変更されず、ビューをリロードすると画像が正しいことです! イベント「press-checkbox」でビューを自動的にリロードするにはどうすればよいですか? ここに私のコード:

// called when the checkmark button is touched 
- (void)checkAction:(id)sender
{
    // note: we don't use 'sender' because this action method can be called separate from the button (i.e. from table selection)
    self.checked = !self.checked;
    UIImage *checkImage = (self.checked) ? [UIImage imageNamed:@"checked.png"] : [UIImage imageNamed:@"unchecked.png"];
    [checkButton setImage:checkImage forState:UIControlStateNormal];
}

提案をありがとうございました!!

ステファノ

4

2 に答える 2

0

これを試して:

- (void)checkAction:(id)sender
{
  if(![sender isSelected])
  {
    [sender setSelected:YES];
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
    //Save state in Database

  }
  else
  {
    [sender setSelected:NO];
    [checkButton setImage:[checkButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
   //Save state in Database
  }

  [YourTableView reloadData];

}

于 2012-06-01T11:03:42.713 に答える
0

既にレンダリングされた UITableViewCell に変更が加えられるたびに、再描画して変更を反映するために、そのセルをリロードする必要があります。

したがって、checkAction をインターセプトした後、テーブル全体 (不要) または単にチェックボックスのあるテーブル行をリロードする必要があります。

次の質問は、チェックボックスがどの行にあったかをどのように知ることができるかということだと思います。さて、ここでシンプルですが簡単に実装できるトリックを紹介します。各チェックボックスに、行の値を持つタグ値 (これは整数値です) を追加します。

次に、次の方法でセル参照を取得します。

- (void)checkAction:(id)sender
{
   int tag= sender.tag;
    NSIndexPath *cellIndexPath = [NSIndexPath indexPathForRow:tag inSection:0];
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:cellIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}

これで、セクションが 1 つしかない場合でも問題なく動作します。複数のセクションがある場合は、テーブル セクションも取得するためにもう少し調整が必要になります。

于 2012-06-02T13:28:46.500 に答える