【问题标题】:IOS UITableview how to take action after table animations completeIOS UITableview如何在表格动画完成后采取行动
【发布时间】:2011-09-10 14:39:11
【问题描述】:

如何在 UITableview 的动画完成后执行操作?

我正在尝试缩小 UITableview 单元格并删除缩小后不可见的单元格子视图。为了缩小单元格,我调用 [tableview beginUpdates] 和 [tableview endUpdates],并更改 UITableview 的heightForRowAtIndexPath 数据源方法返回的单元格高度。

挑战是,我需要 tableview 完成收缩,以便子视图在我可以删除子视图之前看不见。如果我在调用 [tableview endUpdates] 之后(或之前或之间)放置代码以从单元格中删除子视图,则子视图被删除得太快(它不等待动画)并且看起来很有趣。

我的想法是我希望能够设置一个在动画完成后运行的回调,并在回调中删除 subView

【问题讨论】:

  • 迄今为止我发现的最好的事情是在短时间内运行 performSelector:[self performSelector:@selector(removeSubmenuViewFromCellView) withObject:nil afterDelay:.3];
  • 完成。感谢提示

标签: ios animation tableview tableviewcell


【解决方案1】:

这个怎么样?

[CATransaction begin];

[CATransaction setCompletionBlock:^{
    // animation has finished
}];

[tableView beginUpdates];
// shrink the cells
[tableView endUpdates];

[CATransaction commit];

【讨论】:

  • 感谢鲁道夫的建议。我不确定什么时候有机会回顾这个问题,因为我已经有一段时间没有研究这个问题了。但是,如果其他人可以评论这是一个很好的解决方案,或者我可以尝试一下,我会将其标记为答案。与此同时,+1。
  • 这是一个很好的解决方案。刚刚为我工作,我只需要在表格行动画消失后运行代码。
【解决方案2】:

尝试使用 NSNotifications 类。在即将发生某事时发布通知,稍后在某事发生后发布。您可以在同一通知方法中使用布尔值在“即将发生”和“已经发生”之间切换。

【讨论】:

  • (如果此评论重复,请原谅)我的理解是存在的一个 UITableview 通知与此无关,因此注册它无济于事。就我自己创建通知而言,我希望在 tableview 完成动画后立即发布通知,但就像原始问题状态一样,我不知道如何让我的代码运行(发布通知或其他)在那个时候。
  • 发布通知非常简单。只需检查苹果文档即可。提供了清晰准确的示例说明。一切顺利。
  • 我只是说通知在这种情况下没有用 :) 感谢所有反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多