UIPickerView inside UIScrollView hitTest to disable Scrollview?

ios, objective-c, uipickerview, uiscrollview, uiview

Solution

I think I have figured this out, by searching the class description to see if it contains @"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;
}

Now when I drag the UIPicker it works perfectly and the scrollview does not move at all, unless I am clicking on that and dragging it.

Aaron

Problem

I am currently building an application which has a resized UIPickerView on a scrollview the problem I am facing is that when you try to scroll the picker the scrollview is moving instead. For the past few hours I have tried to fix this by disabling the scrollview when the picker is selected by creating a UIScrollView sub class which performs the following hitTest: ``` - (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; } ``` With this above code I find that when I click and hold certain sections of the UIPickerView it cancels the touch and disables the UIScrollview OK and I can move the UIPicker to select a new value, however when I certain areas on the PickerView and do an NSLog on the reported class like below ``` NSLog(@"%@", [result.superview class]); ``` It outputs UIPickerTableViewWrapperCell to the console and the isKindOfClass[UIPickerView class] never gets entered. I have also tried isMemberOfClass which also does not work. Any help would be appreciated. Thanks Aaron

Original source