在UITableViewDelegate中是否存在类似tableViewWillEndDisplayingCell的方法?

时间:2015-08-26 14:44:03

标签: ios objective-c uitableview cell

我希望在iPhone应用程序中的表视图中淡出单元格,然后它就会消失。当它即将出现时,我使用

- (void) tableView: (UITableView *) tableView
   willDisplayCell: (UITableViewCell *) cell
 forRowAtIndexPath: (NSIndexPath *) indexPath

用0.3秒动画将alpha从零改为1。

我想要一样,但是当它即将消失时从1到0。是否有类似于上述方法的任何方法或我还能如何做到这一点?

我不想使用标准iOS UITableViewRowAnimationFade,因为在重新加载表格时我不想要任何其他转换。

修改 我正在重新加载表视图的内容。假设我有一个单击的按钮,它会重新加载我表格中的数据。那时我想淡出现有的细胞并淡化新细胞。

我使用的控制器是实施UIViewController UITableViewDataSource UITableViewDelegate协议的基本UIScrollViewDelegate

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。

在致电[self.tableView reloadData]之前,我正在动画所有可见的细胞淡出。我得到所有可见的单元格并通过

迭代它们
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows])
{
    // here I animate cells to fade out
}

(感谢@AlexKoren向我展示了迭代可见细胞的方法)。

因为我使用[self.tableView reloadData]而没有任何额外的iOS内置动画,所以单元格正在消失。所以现在它们首先消失,然后我的新细胞逐渐消失在

中定义的动画
- (void) tableView: (UITableView *) tableView
   willDisplayCell: (UITableViewCell *) cell
 forRowAtIndexPath: (NSIndexPath *) indexPath

重要:动画完成后我正在重新加载表视图。如果我在迭代单元格后调用[self.tableView reloadData],它会在显示动画之前重新加载表。因为我知道完成动画需要多长时间才能使用

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
                {
                    [self.tableView reloadData];
                });

以前计算过delay

答案 1 :(得分:0)

你试过这个吗?

- (void)tableView:(UITableView *)tableView
didEndDisplayingCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath

我认为这就是你想要的。