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; } } } } 

完美的作品!