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 单元格之外的整个视图

将tapGestureRecognizer添加到其背景视图时无法触发collectionview的事件

如何使用 c# 将 TapGestureRecognizer 添加到从 JSON 创建的项目中?