Ограничить жест касания просмотром прокрутки, а не кнопкой над ним - PullRequest
1 голос
/ 22 июня 2011

У меня есть вид прокрутки и кнопка, расположенная над ним. Когда я добавляю распознаватель жестов касания, кнопка не работает. Есть ли способ ограничить касание только видом прокрутки, а не кнопкой, чтобы кнопка функционировала нормально.

вот мой код

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[scroll addGestureRecognizer:tap];
[tap release];


- (void)tapGesture:(UIGestureRecognizer*)gesture{


NSLog(@"scroll tapped");

}

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Если вы сделаете

tap.cancelsTouchesInView = NO;

Это позволит нажать кнопку.Однако при нажатии кнопки будут обнаруживаться нажатия.Избегайте этого, вам придется создать подкласс UIScrollView и реализовать следующий метод -

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    for ( UIView * subview in self.subviews ) {
        UIView * hitView = [subview hitTest:point withEvent:event];
        if ( hitView )
            return hitView;
    }

    return [super hitTest:point withEvent:event];
}

Реализация описанного выше метода передает касания подпредставлениям вида прокрутки.

0 голосов
/ 04 февраля 2014

Нет необходимости создавать подкласс Scrollview. Следующий код решает проблему простым способом. Метод gestRecognizer: shouldReceiveTouch: делает свое дело.

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
tap.delegate = self;
tap.cancelsTouchesInView = NO;
[scroll addGestureRecognizer:tap];
[tap release];

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (scroll.superview != nil) {
        if ([touch.view isKindOfClass:[UIButton class]])
        {
            return NO; // ignore the touch
        }
    }
    return YES; // handle the touch
}

- (void)tapGesture:(UIGestureRecognizer*)gesture {
    NSLog(@"scroll tapped");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...