3

私の UITableView インスタンスでは、セルを index:0 に移動し、データをリロードしています。問題は、セルが一番上に「スナップ」することです(reloadDataが原因だと思います)。セルを上に移動し、数秒後に reloadData を適用できるかどうか疑問に思っています。私のコードは次のとおりです。

[_toDoItems removeObject:todoItem];

[_toDoItems insertObject:todoItem atIndex:0 ];





[self.tableView beginUpdates];

[self.tableView moveRowAtIndexPath:origIndexPath toIndexPath:0];

[self.tableView endUpdates];

sleep(1);
[self.tableView reloadData];

これに関する問題は、メソッドが呼び出された後、すべてが 1 秒間一時停止し、その後「スナップ」アニメーションが発生することです。

4

3 に答える 3

1

最初に、tableView に更新を期待するように指示しますbeginUpdates。次に、関連するセクションを更新します (tableView にセクションが 1 つしかない場合は、セクション番号にゼロを渡します)。ここでアニメーションを指定します。これをいじって、必要な効果を得ることができます。その後endUpdates、tableView を呼び出します。の typedef は次をUITableViewRowAnimation指定します。

typedef enum {
   UITableViewRowAnimationFade,
   UITableViewRowAnimationRight,
   UITableViewRowAnimationLeft,
   UITableViewRowAnimationTop,
   UITableViewRowAnimationBottom,
   UITableViewRowAnimationNone,
   UITableViewRowAnimationMiddle,
   UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;

遊んで、どれが欲しいかを確認してください。選択するUITableViewRowAnimationNoneことでさえ、時には素晴らしい効果をもたらすことがあります。使用できるセクションの数に応じて- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

以下のテーブル更新コード:

[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
于 2013-08-05T14:56:19.517 に答える
0

これを試して:

[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:origIndexPath
                                                       inSection:0]]
                 withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0
                                                       inSection:0]]
                 withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
于 2013-08-05T15:03:16.823 に答える