uiscrollview不会取消uisegmentedcontrol的内容触摸 [英] uiscrollview won't cancel content touches for uisegmentedcontrol

查看:290
本文介绍了uiscrollview不会取消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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆