Objective c UIPickerView内部UIScrollView hitTest是否禁用Scrollview?

Objective c UIPickerView内部UIScrollView hitTest是否禁用Scrollview?,objective-c,ios,uiview,uiscrollview,uipickerview,Objective C,Ios,Uiview,Uiscrollview,Uipickerview,我目前正在构建一个应用程序,该应用程序在scrollview上有一个调整大小的UIPickerView。我面临的问题是,当您尝试滚动选取器时,scrollview正在移动 在过去的几个小时里,我试图通过创建一个UIScrollView子类来修复此问题,该子类执行以下hitTest,从而在选择选择器时禁用scrollview: - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView* result = [s

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

在过去的几个小时里,我试图通过创建一个UIScrollView子类来修复此问题,该子类执行以下hitTest,从而在选择选择器时禁用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 OK,并且我可以移动UIPicker来选择一个新值,但是当我在PickerView上点击某些区域并对报告的类执行NSLog时,如下图所示

NSLog(@"%@", [result.superview class]);
它将UIPickerTableViewWrapperCell输出到控制台,并且永远不会输入isKindOfClass[UIPickerView class]

我也试过isMemberOfClass,但它也不起作用

任何帮助都将不胜感激


谢谢Aaron

我想我已经找到了答案,通过搜索类描述来查看它是否包含@“UIPicker*”

现在,当我拖动UIPicker时,它工作得很好,scrollview根本不会移动,除非我点击并拖动它


亚伦

不想听起来很悲观,但…:)这正是为什么苹果建议不要有两个滚动视图或基于滚动的视图,一个在另一个内部。我相信有一种方法可以编写此代码,但如果可以,更改设计可能比试图找到解决方案更容易。我从经验中知道这一点,因为我“浪费”了大约2天的时间在scrollview中获得一个tableview…是的,我也考虑过这一点,但在设计过程中走得太远了,我想我已经找到了答案。从电子版看,苹果现在经常在另一个应用程序中使用基于滚动的视图(与日历应用程序一样),从iOS7开始,在scrollview中使用UIDatePicker似乎是常态。我错过什么了吗?
- (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;
}