【问题标题】:TapgestureRecogniser detecting touch as ScrollviewTapgestureRecognizer 将触摸检测为滚动视图
【发布时间】: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行时不删除它

【问题讨论】:

    标签: iphone ipad uiscrollview xcode4.5 uitapgesturerecognizer


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多