我有一个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
答案 0 :(得分:0)
不应该有任何排队的事件。确保你没有以某种方式阻止主线程。
要在动画期间完全阻止事件处理,UIApplication
上有一些有用的方法。
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
如果您需要延迟启动动画并且在延迟阶段不需要任何用户操作,这些方法非常有用。