UIScrollView中的UIPickerView hitTest禁用Scrollview?

时间:2012-06-24 18:49:54

标签: objective-c ios uiview uiscrollview uipickerview

我目前正在构建一个在滚动视图上调整大小的UIPickerView的应用程序,我面临的问题是,当您尝试滚动选择器时,滚动视图正在移动。

在过去的几个小时里,我试图通过创建一个执行以下hitTest的UIScrollView子类来选择选择器时禁用scrollview来解决这个问题:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];
    if ([result.superview isKindOfClass:[UIPickerView class]])
    {
        NSLog(@"Cancel touch");
        self.canCancelContentTouches = NO;  
        self.delaysContentTouches = NO;
        self.scrollEnabled = NO;
    }
    else 
    {
        self.canCancelContentTouches = YES; 
        self.delaysContentTouches = YES; 
        self.scrollEnabled = YES;
    }
    return result;
}

通过以上代码,我发现当我点击并按住UIPickerView的某些部分时,它会取消触摸并禁用UIScrollview确定,我可以移动UIPicker来选择一个新值,但是当我在PickerView上的某些区域时在报告的类上执行NSLog,如下所示

NSLog(@"%@", [result.superview class]);

它将UIPickerTableViewWrapperCell输出到控制台,并且永远不会输入isKindOfClass [UIPickerView类]。

我也尝试过isMemberOfClass,它也不起作用。

任何帮助将不胜感激。

谢谢Aaron

1 个答案:

答案 0 :(得分:4)

我想通过搜索课程描述来查看它是否包含@“UIPicker *”

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{

    UIView* result = [super hitTest:point withEvent:event];

    NSString *viewDescription = [result.superview class].description;
    NSRange range = [viewDescription rangeOfString : @"UIPicker"];

    if (range.location != NSNotFound) 
    {
        NSLog(@"Cancel touch on ScrollView");
        self.canCancelContentTouches = NO;  
        self.delaysContentTouches = NO;
        self.scrollEnabled = NO;
    }
    else 
    {
        self.canCancelContentTouches = YES; 
        self.delaysContentTouches = YES;
        self.scrollEnabled = YES;
    }
    return result;
}

现在,当我拖动UIPicker时,它完美运行,滚动视图根本不会移动,除非我点击它并拖动它。

亚伦