【问题标题】:Only animate cell from willDisplayCell when user scroll, not after reloadData只有在用户滚动时才会从 willDisplayCell 动画单元格,而不是在 reloadData 之后
【发布时间】:2014-01-26 14:33:29
【问题描述】:

好的,所以我在willDisplayCell 方法中实现了一个自定义动画。当我上下滚动视图时它工作正常。当我点击其中一行时,它将被推送到另一个视图控制器以显示更多详细信息并让用户更新数据。

问题是当用户返回 tableview 时。我在viewWillAppear 中调用了[tableView reloadData] 方法,以确保显示更新的数据。这将触发我之前设置的动画过渡。

我的问题是:有没有办法只在用户向上/向下滚动表格视图时执行动画,而不是在调用 reloadData 时执行动画?

如果有办法将willDisplayCellscrollViewDidScroll 或类似的东西混合在一起,那就太棒了。

谢谢!

【问题讨论】:

  • 是否需要重新加载表格?你能得到一个改变状态的回调并只更新它(如果它是可见的,直接进入单元格)?
  • 是的,我更喜欢重新加载数据。上面的例子(关于从细节 VC 回来)只是一种情况。我还在 viewDidLoad 上调用了 reloadData,它看起来也不漂亮。

标签: ios objective-c animation uitableview


【解决方案1】:

最简单的解决方案是添加一个状态标志,告诉willDisplayCell 它是否应该实际制作动画。

将属性添加到您的UITableViewDelegate

@property (nonatomic) BOOL shouldPreventDisplayCellAnimation;

在调用reloadData前后设置属性:

- (void)viewWillAppear:(BOOL)animated
{
  …
  self.shouldPreventDisplayCellAnimation = YES;
  [self.tableView reloadData];
  self.shouldPreventDisplayCellAnimation = NO:
}

修改 willDisplayCell 以根据条件设置动画

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
  if (!self.shouldPreventDisplayCellAnimation) {
    //animate
  }
}

【讨论】:

  • 理论上,我认为这会奏效。但是当 reloadData 完成时,动画将被触发。我检查了标志设置是否正确。
  • 但是,根据您的想法,我想我想出了一个解决方法。我将self.shouldPreventDisplayCellAnimation = NO; 放在scrollViewWillBeginDragging 方法中。似乎现在正在工作!如果没有其他解决方案,我会接受你的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多