触摸在自定义搜索期间排队的事件?

时间:2013-07-01 18:57:31

标签: ios uistoryboardsegue touchesbegan

我有一个tableview A,其行条目自定义为GridView B(实际上使用开源MMGridView)。 gridView / scrollView的子视图单元格使用touchesBegan / TouchesEnd来检测它们的选择。

我正在使用故事板,并且自定义segue是动态的,并由tableView中的didselectrowatindexpath / performsegue启动。

问题是,一旦选择了一个tableview行,其他的抽头就会排队并传递给各个gridCells。

在自定义segue中,我尝试过设置destinationviewcontroller.view.userInteractionEnabled = NO;然后在destinationViewController的viewDidAppear中重新启用它。这不起作用,排队的触摸事件仍然传递给gridView的子单元。

如何在自定义动画过渡期间刷新或取消任何似乎排队的触摸事件?

编辑:删除自定义segue似乎停止了“排队”触摸事件行为。或者也许segue现在只是发生得足够快,以至于在它期间没有发生触摸事件?为了完整起见,这是我的定制uistoryboardsegue给我的问题:

#import "QuartzCore/QuartzCore.h"

@implementation TTOCustomSegue

-(void)perform {

UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
//destinationController.view.userInteractionEnabled = NO;

CATransition* transition = [CATransition animation];
transition.duration = .4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionFade; 
transition.subtype = nil;

[sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition];    
[sourceViewController.navigationController pushViewController:destinationController animated:NO];       
}
@end

1 个答案:

答案 0 :(得分:0)

不应该有任何排队的事件。确保你没有以某种方式阻止主线程。

要在动画期间完全阻止事件处理,UIApplication上有一些有用的方法。

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

如果您需要延迟启动动画并且在延迟阶段不需要任何用户操作,这些方法非常有用。