0

わかりました、私は立ち往生しています。これは私の以前の投稿の拡張です。これが私がやろうとしていることです。

ナビゲーションバーに[編集]ボタンがあり、押すと1つのセクションのテーブルビューの先頭にセルが追加されます。このセルの目的は、を使用して新しいデータをテーブルに追加できるようにする場合です。したがって、編集スタイルは挿入です。テーブルの残りのセルは、削除の編集スタイルで構成されています。

これが私のseteditingメソッドです:

- (IBAction) setEditing:(BOOL)isEditing animated:(BOOL)isAnimated
{
    [super setEditing:isEditing animated:isAnimated];
    // We have to pass this to tableView to put it into editing mode.
    [self.tableView setEditing:isEditing animated:isAnimated];

  // When editing is begun, we are adding and "add..." cell at row 0.
  // When editing is complete, we need to remove the "add..." cell at row 0.
  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
  NSArray* path = [NSArray arrayWithObject:indexPath];

  // fill paths of insertion rows here
  [self.tableView beginUpdates];
  if( isEditing )
   [self.tableView insertRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationBottom];
  else
   [self.tableView deleteRowsAtIndexPaths:path withRowAnimation:UITableViewRowAnimationBottom];
  [self.tableView endUpdates];

  // We nee to reload the table so that the existing table items will be properly 
  // indexed with the addition/removal of the the "add..." cell
  [self.tableView reloadData];
}

コードでこの余分なセルを考慮していますが、2つのインデックスパス=[0,0]-テーブルの新しいセルと古い元の最初のセルがあります。setEditingでテーブルビューセルを再読み込みする呼び出しを追加すると、セルのインデックスが再作成されますが、テーブルビューはアニメーション化されなくなりました。

私もケーキが欲しいです。私がやろうとしていることを達成し、アニメーションを維持する別の方法はありますか?

-ジョン

4

1 に答える 1

0

やりたいことはできますが、データ ソースとテーブルの一貫性を保つ必要があります。つまり、テーブルが再ロードされたとき、テーブルの作成を担当tableView:cellForRowAtIndexPathする他のUITableViewDataSourceおよびUITableViewDelegateメソッドは、 で追加/削除している編集状態に応じて同じセルを返す必要がありますsetEditing:antimated:

したがって、セルを挿入/削除するときはsetEditing:animated:、データ ソースにも同じ変更が反映されていることを確認する必要があります。セクションの先頭に特別なセルを追加しているが、残りのデータが配列からのものである場合、これは注意が必要です。これを行う 1 つの方法は、テーブルをリロードするときです。編集する場合は、行 0 を追加セルにし、後続のセルの配列インデックスに行 1 を使用します。その場合tableView:numberOfRowsInSection:、余分なセルを考慮して に 1 つ追加する必要もあります。

別の方法は、セルを追加するためのセクションを作成することです。編集していないときは 0 行、それ以外の場合は 1 行で、適切なセルを返します。これには、どのように表示するかに応じて、テーブルとセルを適切に構成する必要もあります。

于 2011-12-01T17:01:53.307 に答える