如何仅对一个单元格/行进行重新加载和动画处理?现在我下载一些文件。每次文件下载完成时,我称其为完成的委托,然后调用[tableview reload]。但是随后整个表重新加载。以及如何为表格设置动画,使其不会闪烁。例如淡入淡出效果。
问候麦克斯
Answers:
使用以下UITableView
实例方法:
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
你必须指定NSArray
的NSIndexPaths
要重装。如果只是想重新加载。如果您只想重新加载一个单元,则可以提供NSArray
仅容纳一个的单元NSIndexPath
。例如:
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
您可以看到UITableViewRowAnimation
为行刷新设置动画的所有可能方式的枚举。如果您不需要任何动画,则可以使用value UITableViewRowAnimationNone
,如示例中所示。
重新加载特定的行比仅获得所需的动画效果具有更大的优势。您还可以极大地提高性能,因为只有真正需要重新加载的单元才可以刷新,重新定位和重绘数据。根据单元的复杂程度,每次刷新单元都会有相当大的开销,因此缩小刷新量是必须尽可能使用的必要优化。
reloadRowsAtIndexPaths:withRowAnimation:
它tableView
?
斯威夫特4&5
对于TableView
let index = IndexPath(row: 0, section: 0)
tableView.reloadRows(at: [index], with: .automatic)
对于CollectionView
let index = IndexPath(item: 2, section: 0)
collectionView.reloadItems(at: [index])
Apple Document 采用了新语法
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
迅速
您可以使用
let selectedIndexPath = IndexPath(item:0 , section: 0)
self.tableView.reloadRows(at: [selectedIndexPath], with: .none)
为了重新加载特定的单元格。
要在tableView
at中重新加载特定单元格indexPaths
,您需要创建的数组,indexPaths
然后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];