Событие прикосновения UIButton проваливается в основное представление - PullRequest
2 голосов
/ 04 февраля 2011

Я создал маленький UIView, который содержит два UIButton с.Представление реагирует на события UITapGesture.Предполагается, что кнопки реагируют на TouchUpInside, однако, когда я нажимаю на кнопки, ответчик является основным видом, и срабатывает селектор жестов касания.Нужны советы или предложения.

Ответы [ 6 ]

4 голосов
/ 20 мая 2011

Вы можете изменить метод, который реагирует на жест касания в оранжевом представлении:

-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer {
    CGPoint location = [recognizer locationInView:orangeView];
    UIView *hitView = [orangeView hitTest:location withEvent:nil];

    if ([hitView isKindOfClass:[UIButton class]]) {
        return;
    }

    //code that handle orange view tap
    ...
}

Таким образом, если вы прикоснетесь к кнопке UIB, касание будет игнорироваться основным представлением.

2 голосов
/ 10 июля 2012

Правильный ответ (который препятствует тому, чтобы tabrecognizer перехватил любые касания и не требовал реализации делегата и т. Д.), найден здесь .Я получил подсказку к этому ответу через в этом сообщении .

Вкратце:

tapRecognizer.cancelsTouchesInView = NO;

"Что мешает распознавателю касания быть единственнымчтобы поймать все краны "

0 голосов
/ 19 марта 2012
0 голосов
/ 05 февраля 2011

Проблема этого дизайна в том, что он похож на встраивание одной кнопки в другую. Хотя у вас может быть веская причина для этого, вам следует быть более осторожным с потоком событий.

Что происходит, так это распознаватель жестов, перехватывающий касания до того, как они достигают подпредставлений (две кнопки в вашем случае). Вам следует реализовать протокол UIGestureRecognizerDelegate, а именно метод gestureRecognizer:shouldReceiveTouch:, и возвращать NO, если касание находится внутри любой из двух кнопок. Это предотвратит узурпацию оранжевого вида, предназначенную для кнопок, и кнопки начнут работать как положено.

0 голосов
/ 05 февраля 2011

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

0 голосов
/ 05 февраля 2011

Каждый UIView имеет свойство «exclusiveTouch». Если установлено значение YES, представление не пройдет касание цепочки респондента. Попробуйте установить это свойство на кнопках UIB и посмотрите, будет ли это иметь значение.

...