1つのセル/行だけをリロードしてアニメーション化するにはどうすればよいですか?現在、いくつかのファイルをダウンロードしています。ファイルのダウンロードが終了するたびに、デリゲートが終了したことを呼び出し、[tableview reload]を呼び出します。しかし、その後、テーブル全体がリロードされます。そして、どのようにテーブルをアニメーション化して、点滅しないようにすることができますか。たとえば、フェード効果など。
あいさつ
次のUITableView
インスタンスメソッドを使用します。
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
リロードするNSArray
のNSIndexPaths
を指定する必要があります。リロードしたいだけの場合。 1つのセルのみをリロードする場合は、NSArray
を1つだけ保持するNSIndexPath
を指定できます。例えば:
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
行の更新をアニメーション化するすべての可能な方法について、UITableViewRowAnimation
enumを見ることができます。アニメーションが不要な場合は、例のように値UITableViewRowAnimationNone
を使用できます。
特定の行をリロードすることには、単に目的のアニメーション効果を得るよりも大きな利点があります。また、本当に再ロードする必要があるセルのみがデータを更新、再配置、再描画されるため、パフォーマンスが大幅に向上します。セルの複雑さによっては、セルを更新するたびにかなりのオーバーヘッドが発生する可能性があるため、実行する更新量を絞り込むことは、可能な限り使用する必要がある最適化です。
Tableviewセルのテキストを更新するだけの場合。
UITableViewCell *cell = [_myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
cell.textLabel.text = [NSString stringWithFormat:@"%i", (int)_targetMaxDistanceSlider.value];
Apple Document 新しい構文で完了
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
指定されたtableView
でindexPaths
の特定のセルをリロードするには、indexPaths
のarrayを作成し、reloadRowsAtIndexPaths
で関数tableView
を呼び出す必要があります。
以下に例を示します。
スイフト5:
let indexPathsToReload = [indexPath1, indexPath2, indexPath3]
tableView.reloadRows(at: indexPathsToReload, with: .none)
目標C:
NSArray *indexPaths = @[indexPath1, indexPath2, indexPath3];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
または
NSArray *indexPaths = [NSArray arraywithobject:@"indexPath1", @"indexPath2", @"indexPath3",nil];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
スイフト
使用できます
let selectedIndexPath = IndexPath(item:0 , section: 0)
self.tableView.reloadRows(at: [selectedIndexPath], with: .none)
特定のセルをリロードするため。