TapgestureRecognizer 将触摸检测为滚动视图
Posted
技术标签:
【中文标题】TapgestureRecognizer 将触摸检测为滚动视图【英文标题】:TapgestureRecogniser detecting touch as Scrollview 【发布时间】:2013-04-16 10:29:48 【问题描述】:我将 UIPickerView 添加到滚动视图中。当我从pickerview 中选择一行时,它会被隐藏并且我无法选择它,因为我已经编写了代码以在用户点击屏幕上的任何位置(scrollView)而不是pickerView 时删除pickerview。但现在即使我点击(选择)pickerview,我也隐藏了 gtng pickerview,因为触摸被检测为 ScrollView。我不明白我哪里出错了。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
if(touch.view==testScroll)
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
ViewForValuePicker.hidden=true;//view to which pickerview is added and this s view is added to scrollview
pickerView.hidden=YES;
return YES;
else
return NO;
点击屏幕上的任意位置时如何删除pickerview,点击pickerview行时不删除它
【问题讨论】:
【参考方案1】:试试这样可能对你有帮助,
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
NSLog(@"touches began");
UITouch *touch = [touches anyObject];
if([touch view] isKindOfClass:[UIScrollView class])
//do whatever you want to do here
【讨论】:
但是这个方法没有被调用。你能告诉我该怎么做吗?【参考方案2】:你可以做的是为pickerview创建第二个手势识别器,它会吞下那些不应该发送到scrollview的点击。
请参阅一个完整的测试项目来实现这一目标。您可以看到点击pickerview 被路由到gestureswallover 方法,并且pickerview 外部的所有点击都被路由到gesturehelper 方法,因此您可以在这些方法中实现您的逻辑。
在 ViewController.h 中,这些是手势识别器的操作方法:
- (IBAction) gesturehelper: (UITapGestureRecognizer*) sender;
- (IBAction) gestureswallover: (UITapGestureRecognizer*) sender;
在我的 ViewController.m 中有这个(具体的逻辑应该包含在操作方法中):
- (IBAction) gesturehelper: (UITapGestureRecognizer*) sender
NSLog(@"gesturehelper tap, %@", sender.view);
- (IBAction) gestureswallover: (UITapGestureRecognizer*) sender
NSLog(@"gestureswallover tap, %@", sender.view);
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
return 1;
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
return 5;
【讨论】:
以上是关于TapgestureRecognizer 将触摸检测为滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
禁用同时 rightBarButton / tapGestureRecognizer 触摸
在 UIView 中将 tapGestureRecognizer 添加到 UIImageView 并通过协议调用方法
cocos2d-x ios游戏开发初认识 触摸事件与碰撞检測
将 TapGestureRecognizer 添加到除 UICollectionView 单元格之外的整个视图