添加到UIScrollView时UIPickerView不滚动!
我已将UIPickerView添加到UIScrollView,但现在UPickerView不滚动。当我将它添加到self.view时,它会顺利滚动。 这里我的代码添加到UIScrollView时UIPickerView不滚动!
monthsArray = [[NSArray alloc] initWithObjects:@"Jan",@"Feb",@"Mar",@"Apr",@"May",@"Jun",@"Jul",@"Aug",@"Sep",@"Oct",@"Nov",@"Dec",nil];
UIPickerView *objPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(185,350,100,100)];
objPickerView.userInteractionEnabled=YES;
objPickerView.delegate = self;
objPickerView.showsSelectionIndicator = YES;
[objScrollView addSubView:objPickerView];
我已经包括了delegete及其方法。看看这个问题。提前致谢。
如果我不清楚请告诉我。
从UIScrollView的类文件:
重要:您不应该嵌入的UIScrollView对象的UIWebView或UITableView的对象。如果这样做,可能会导致意外的行为,因为两个对象的触摸事件可能混淆并被错误地处理。
他们没有提到UIPickerView那里,但我不知道它是否应该被添加到该列表。它与其他人共享使用触摸滚动事物的特性。
我想这可能会解决你的问题(一定要检查的评论太):因为它抢断触摸
http://www.alexc.me/uiscrollview-and-uidatepicker/153/
基本上你必须DelaysContentTouches和CanCancelContentTouches设置为NO上滚动视图,来自选取器的事件。
我有一个类似的UIPickerView嵌套在UIScrollView中的问题,并通过继承UIPickerView来解决它。对延迟的更改ContentTouches/ CanCancelContentTouches没有帮助,其他“答案”基本上都是“不这样做” - 呃,那根本就没有答案!它可以完成,你可以让一个选择器在scrollView中运行。
我回答以下问题上的子类UIPickerView,包括在年底一些代码,可以帮助你:
Responding to touchesBegan in UIPickerView instead of UIView
我使用UIPickerView的子类,为了同样的目的,但我要简单得多:
@implementation ScrollablePickerView
- (UIScrollView *)findScrollableSuperview {
UIView *parent = self.superview;
while ((nil != parent) && (![parent isKindOfClass:[UIScrollView class]])) {
parent = parent.superview;
}
UIScrollView* scrollView = (UIScrollView *)parent;
return scrollView;
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
UIScrollView* scrollView = [self findScrollableSuperview];
if (CGRectContainsPoint(self.bounds, point)) {
scrollView.canCancelContentTouches = NO;
scrollView.delaysContentTouches = NO;
} else {
scrollView.canCancelContentTouches = YES;
scrollView.delaysContentTouches = YES;
}
return [super hitTest:point withEvent:event];
}
@end
工程就像一个魅力 - 至少对我来说。
我一直在遇到类似的问题。我有一个UIPickerView,通过应用转换(它工作得很好),我转向了水平,但是在scrollview中,滚动只能在左侧进行。
我认为正在发生的事情是,UIPicker查找它的父链来查看是否有任何手势识别器,并将自己设置为委托,因此它可以禁止手势识别进一步触及其边界内的链,当变换改变视觉边界时,它不会改变框架,它是否正在寻找它原始边界内的触摸。
如果这不是正在发生的事情,您可以使用它来防止滚动视图窃取您的触摸。
我想我要切换到自定义UISCrollView,而不是我的转换UIPickerView。
可以使用Swift 3更新到这个解决方案 – Jeeves 2017-04-19 05:13:38