2011-06-08 55 views
8

如何在UITableview的动画完成后采取行动?IOS UITableview如何在表格动画完成后采取行动

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

面临的挑战是,我需要tableview来完成缩小,以便在删除子视图之前子视图看不见。如果我把代码从调用[tableview endUpdates]之后(或之前或之间)删除子视图,那么子视图被过早删除(它不会等待动画)并且看起来很有趣。

我的想法是我希望能够建立在动画完成后运行的回调,并删除子视图在回调

+3

我发现至今运行performSelector在很短的时间延迟的最好的事情: [自performSelector:@selector(removeSubmenuViewFromCellView)withObject:无afterDelay:0.3]; – kris 2011-06-09 19:14:14

+1

完成。感谢提示 – kris 2014-03-20 23:28:22

回答

19

这是怎么回事?

[CATransaction begin]; 

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

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

[CATransaction commit]; 
+0

谢谢你的建议鲁道夫。我不确定什么时候有机会审查这个问题,因为我已经处理了这个问题已经有一段时间了。但是,如果其他人可以评论这是一个很好的解决方案,或者我可以尝试一下,我会将其标记为答案。与此同时,+1。 – kris 2013-02-04 19:58:03

+0

这是一个很好的解决方案。刚刚为我工作,我需要的代码才能在表格行被动画之后运行。 – Andrew 2013-02-08 14:30:52

+2

好的解决方法,这个答案应该被接受。 – Bringo 2013-03-07 21:29:54

-4

尝试使用NSNotifications类。发布通知,当有事情发生时,以及事后发生。您可以使用相同通知方法中的bool在“即将发生”和“已发生”之间切换。

+0

(如果此评论是重复,请原谅)我的理解是,存在的一个UITableview通知与此无关,因此注册并不会有帮助。至于自己创建通知,我希望通知在tableview完成动画后立即发布,但像原始问题所述,我不知道如何运行代码(发布通知或以其他方式)。 – kris 2011-06-09 19:13:25

+0

发布通知非常简单..只需检查苹果文档的相同。提供了清晰准确的解释。一切顺利您的任务。 – SeriousSam 2011-06-13 08:30:07

+0

我只是说在这种情况下通知不会有用:)感谢所有的反馈! – kris 2011-06-15 13:30:44