如何重新加载和动画一个UITableView单元格/行?

mad*_*max 68 animation cocoa-touch objective-c uitableview

我怎样才能重新加载并动画一个单元格/行?现在我下载一些文件.每次文件下载完成后,我都会调用它完成的委托并调用[tableview reload].但随后整个表重新加载.我怎样才能为桌子设置动画,使其不会闪烁.例如褪色效果等等.

迎接马克斯

Jam*_*ord 186

使用以下UITableView实例方法:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Run Code Online (Sandbox Code Playgroud)

你必须指定NSArrayNSIndexPaths要重装.如果你只想重新加载.如果您只想重新加载一个单元格,那么您可以提供NSArray仅包含一个单元格的单元格NSIndexPath.例如:

NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
Run Code Online (Sandbox Code Playgroud)

您可以看到UITableViewRowAnimation枚举所有可能的动画行刷新动画的方法.如果您不想要任何动画,则可以使用该值UITableViewRowAnimationNone,如示例中所示.

重新加载特定行比仅仅获取您想要的动画效果更有优势.您还可以获得巨大的性能提升,因为只有您真正需要重新加载的单元才会刷新,重新定位和重新绘制数据.根据单元格的复杂程度,每次刷新单元格时都会产生相当大的开销,因此缩小所做的刷新量是必要的优化,应尽可能使用.

  • 使用新语法,您还可以执行以下操作:[UITableView reloadRowsAtIndexPaths:@ [indexPath] withRowAnimation:UITableViewRowAnimationNone]; (17认同)

Akb*_*han 9

斯威夫特 4 & 5

对于 TableView

let index = IndexPath(row: 0, section: 0)
tableView.reloadRows(at: [index], with: .automatic)
Run Code Online (Sandbox Code Playgroud)

对于 CollectionView

let index = IndexPath(item: 2, section: 0)
collectionView.reloadItems(at: [index])
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您只需要更新 tableview 单元格中的文本..

UITableViewCell *cell = [_myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];

cell.textLabel.text = [NSString stringWithFormat:@"%i", (int)_targetMaxDistanceSlider.value];
Run Code Online (Sandbox Code Playgroud)