Objective c UIPickerView内部UIScrollView hitTest是否禁用Scrollview?
我目前正在构建一个应用程序,该应用程序在scrollview上有一个调整大小的UIPickerView。我面临的问题是,当您尝试滚动选取器时,scrollview正在移动 在过去的几个小时里,我试图通过创建一个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
- (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;
}