1

我将 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的行时不要删除它

4

2 回答 2

0

你可以做的是为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;
}
于 2013-04-17T10:36:50.080 回答
0

试试这样可能对你有帮助,

- (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

   }
}
于 2013-04-16T10:43:16.940 回答