Добавление UITapGestureRecognizer к представлению с последующим удалением кажется коротким замыканием событий кнопки - PullRequest
1 голос
/ 30 мая 2010

В приведенном ниже коде я выскакиваю ImageView в результате прикосновения пользователя к простой информационной кнопке. Есть другие кнопки на виде.

Чтобы отклонить информацию, я добавил UITapGestureRecognizer в представление своих контроллеров и скрыл представление при обнаружении касания.

Если я не удаляю tapGestureRecognizer, действие вызывается каждый раз, когда некоторые.

Даже когда я удаляю действие жеста, ни одна кнопка не получает события touchUpInside после добавления этого распознавателя жестов. Зачем?

Код из моего MainViewController

- (void) dismissInfo: (UITapGestureRecognizer *)gesture {
    [kInfoView setHidden: YES];
    [gesture removeTarget: self action: NULL];
}

- (IBAction) displayInfo {      
    CGRect startFrame = CGRectMake(725, 25, 0, 0), origFrame;
    CGFloat yCenter = [kInfoView frame].size.height/2 + 200;
    CGPoint startCenter = CGPointMake(724, 25), displayCenter = CGPointMake(384, yCenter);
    UITapGestureRecognizer *g = [[UITapGestureRecognizer alloc] initWithTarget: self
                                                                        action: @selector(dismissInfo:)];

    [self.view addGestureRecognizer: g];
    origFrame = [kInfoView frame];
    [kInfoView setCenter: startCenter];
    [kInfoView setHidden: NO];
    [kInfoView setFrame: startFrame];

    [UIView beginAnimations: @"info" context: nil];
    [UIView setAnimationDuration: .5];
    [UIView setAnimationDelegate: self];

    [kInfoView setFrame: origFrame];
    [kInfoView setCenter: displayCenter];

    [UIView commitAnimations];
}

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Я мог бы изобразить одно из возможных решений:
Вместо того, чтобы скрывать представление , вы можете удалить его из суперпредставления (и добавить его снова, когда вам это нужно). Я думаю, что в этом случае GestureRecognizer больше не активен.

0 голосов
/ 13 сентября 2011

То, как вы удаляете распознаватель жестов , удаляет все распознаватели жестов из вашего класса. Не только те, что вы установили, но и те, которые настроены в «супер».

Вот почему вы не получаете событий touchUpInside после того, как таким образом удалили распознаватель жестов.

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

...