0

グループ化されたUITableViewの2番目のセクションにセルをリロードするために、以下のコードを呼び出すタイマーがあります。最初のセクション/セルが表示されないように画面を上にスクロールしない限り、完全に正常に機能します。正しい位置に「跳ね返る」と、セクション0に表示されるはずのテキストがセクション1に表示され、その逆も同様です。

  [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone];

reloadRowsAtIndexPathsまたはcellForRowAtIndexパスは、完全な(表示または非表示の)セルの先頭から機能しますか、それとも画面に表示されているセルからのみ機能しますか?つまり、セクション0は、画面に表示されているかどうかによって実際に変化しますか?

他に何が原因でcellForRowAtIndexPathが間違ったデータをセルにロードしますか?

4

1 に答える 1

1

さて、私はあなたのプロジェクトで少し遊んだ、ここに私の提案があります:

ボタンをセルに追加するときは、使用したくないときにボタンを削除することを忘れないでください(セルを更新するときは、基本的に新しいセルを作成し、2番目のセルを保存して再利用するため、下にスクロールして次に、そのセルを名前のセルとして再利用します)。

  if (cell == nil) 
  {
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }  
 [[cell viewWithTag:2] removeFromSuperview]; 

これを機能させるには、対応するタグをボタンに設定する必要があります。

  myButton1.tag = 2;
  [cell addSubview:myButton1]; 

また、ボタンをcontentViewではなく、セルに直接追加します(これは私にとってはうまくいきましたが、理由はわかりません)。

編集:私はあなたのプロジェクトの修正バージョンをアップロードしました、それをダウンロードしてください。

于 2012-07-03T12:07:28.713 に答える