UILongPressGestureRecognizer на UITableViewCell - двойной вызов - PullRequest
3 голосов
/ 07 октября 2011

Я использую UILongPressGestureRecognizer в ячейке. Что мне нужно: когда пользователь нажимает на ячейку в течение 1,0 секунды, вызовите один контроллер представления. Если пользователь касается ячейки, другой VC.

Я могу сделать это с помощью UILongPressGestureRecognizer. Но проблема в том, что дважды вызывает viewController.

Код:

if (indexPath.section == 0 && indexPath.row == 1){
    UILongPressGestureRecognizer *longPressTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(memberListWithSearchOptions)];

    longPressTap.minimumPressDuration = 1.0;

    [cell addGestureRecognizer:longPressTap];
    [longPressTap release];
}

Я думаю, что после распознавания LongPress нужно отключить распознаватель, пока на экране снова не появится tableView.

Как я могу это сделать?

Спасибо

RL

Ответы [ 2 ]

7 голосов
/ 07 октября 2011

Вместо того, чтобы отключить его, вам, вероятно, нужно проверить свойство state распознавателя жестов и отобразить следующий контроллер вида, только если состояние UIGestureRecognizerStateBegan (или UIGestureRecognizerStateEnded).

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

UILongPressGestureRecognizer *longPressTap = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self 
        action:@selector(memberListWithSearchOptions:)];  //colon at end

//...

- (void)memberListWithSearchOptions:(UILongPressGestureRecognizer *)lpt
{
    if (lpt.state == UIGestureRecognizerStateBegan)
        //or check for UIGestureRecognizerStateEnded instead
    {
        //display view controller...
    }
}
0 голосов
/ 16 апреля 2013

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

-  (void)memberListWithSearchOptions:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
    NSLog(@"UIGestureRecognizerStateEnded");
    //Do Whatever You want on End of Gesture
}
else if (sender.state == UIGestureRecognizerStateBegan){
    NSLog(@"UIGestureRecognizerStateBegan.");
    //Do Whatever You want on Began of Gesture
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...