uiscrollview不会取消uisegmentedcontrol的内容
我已经分类了UIScrollView并覆盖touchesShouldCancelInContentView:方法如下:
-(BOOL)touchesShouldCancelInContentView:(UIView *)view { if ([view isKindOfClass:[UIButton class]] || [view isKindOfClass:[UISegmentedControl class]]) { return YES; } if ([view isKindOfClass:[UIControl class]]) { return NO; } return YES; }
它适用于UIButton,但它不适用于UISegmentedControl。 任何帮助,将不胜感激
终于搞明白了。 必须inheritanceUISegmentedControl和UIScrollView。
1.)为UISegmentedControl添加一个新的属性:
@property (nonatomic, assign) BOOL touchProcessed;
2)重载tfe按照UISegmentedControl的方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (touchProcessed) { [super touchesBegan:touches withEvent:event]; touchProcessed = NO; } else { [self.nextResponder touchesBegan:touches withEvent:event]; touchProcessed = NO; } } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [self.nextResponder touchesMoved:touches withEvent:event]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self.nextResponder touchesEnded:touches withEvent:event]; }
3.)重载了UIScrollview的以下方法:
-(BOOL)touchesShouldCancelInContentView:(UIView *)view { if ([view isKindOfClass:[self class]]) { return YES; //if there are two nested custom scrollviews } if ([view isKindOfClass:[UIButton class]] || [view isKindOfClass:[CustomSegmentedControl class]] || [[view superview] isKindOfClass:[CustomSegmentedControl class]]) { return YES; } if ([view isKindOfClass:[UIControl class]]) { return NO; } return YES; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.dragging) { for (UIView *sv in self.subviews) { if ([sv isKindOfClass:[CustomSegmentedControl class]]) { //if there is more than one add a tag or tomething [(CustomSegmentedControl *)sv setTouchProcessed:YES]; [sv touchesBegan:touches withEvent:event]; return; } } } }
完美的作品!