UITableView重新加载完成时是否可以获得回调?

9
我正在重新加载表视图中的一些单元格。重新加载完成后,我希望滚动到它们可见。我知道 scrollToRowAtIndexPath:atScrollPosition: 方法。但我需要在重新加载完成后调用它,因为重新加载会改变行高。
以下是一些相关问题,但它们并没有完全回答我的问题。 UITableView , Scroll to bottom on reload? How to Start UITableView on the Last Cell 编辑 - 我的重新加载不会插入或删除任何行。相反,我正在重新加载一个或多个单元格以反映更新的信息。

https://dev59.com/AW435IYBdhLWcg3w9FLi - Sanniv
https://dev59.com/3WQo5IYBdhLWcg3wbexJ - hariszaman
2个回答

0

这里有一些你可以使用的巧妙方法:

1)当你调用reloadData时,你的cellForRowAtIndexPath:代理函数将会为每个可见的单元格调用一次。你可以计算这些次数,然后在函数被调用足够多次后触发一个动作。

2)我敢打赌其他一些UITableViewDelegate函数也以确定的方式被调用。也许你可以在其中一个函数中调用你的刷新函数,或许还带有一个小的延迟。

3)你还可以在[tableView reloadData]之后使用performSelector:withObject:afterDelay:并使用一些硬编码的延迟。


-3

虽然不是理想的解决方案,但我已经通过使用UIView动画和相应的完成回调来解决了这个问题。我将其放在了UITableView类别中。它的工作方式就像你期望的那样。

- (void)reloadDataWithCompletion:(void (^)(BOOL finished))completion {
  [UIView animateWithDuration:0.33 animations:^(){
    [self reloadData];
  }completion:completion];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接