uiscrollview不会取消uisegmentedcontrol的内容触摸 [英] uiscrollview won't cancel content touches for uisegmentedcontrol
问题描述
我已经将UIScrollView子类化并按以下方式覆盖touchesShouldCancelInContentView:方法:
I've subclassed th UIScrollView and overriden the touchesShouldCancelInContentView: method the following way:
-(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。任何帮助将不胜感激
It works perfectly for UIButton, but it doesn't work for UISegmentedControl. Any help would be appreciated
推荐答案
最后想出来了。必须继承UISegmentedControl和UIScrollView。
Finally figured it out. Had to subclass both UISegmentedControl and UIScrollView.
1。)为UISegmentedControl添加了一个新属性:
1.) added a new property for UISegmentedControl:
@property (nonatomic, assign) BOOL touchProcessed;
2。)重载了UISegmentedControl的以下方法:
2.) overloaded the following methods of the UISegmentedControl:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (touchProcessed) {
[super touchesBegan:touches withEvent:event];
}
else {
[self.nextResponder touchesBegan:touches withEvent:event];
}
self.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的以下方法:
3.) overloaded the following methods of th 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;
}
}
}
}
作品完美!
这篇关于uiscrollview不会取消uisegmentedcontrol的内容触摸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!