我目前正在构建一个在滚动视图上调整大小的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
答案 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时,它完美运行,滚动视图根本不会移动,除非我点击它并拖动它。
亚伦