Распознаватели жестов и TableView

У меня есть UIView, который охватывает все UITableView. UIView использует распознаватели жестов для управления отображением таблицы. Мне все еще нужны вертикальные прокрутки UITableView и строки. Как передать эти данные в таблицу с помощью распознавателей жестов?

Ответы

Ответ 1

Назначьте свой жест табличному виду, и таблица позаботится об этом:

UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]
        initWithTarget:self action:@selector(handleSwipeFrom:)];
[gesture setDirection:
        (UISwipeGestureRecognizerDirectionLeft
        |UISwipeGestureRecognizerDirectionRight)];
[tableView addGestureRecognizer:gesture];
[gesture release];

Затем в вашем методе жестов действовать, исходя из направления:

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
        [self moveLeftColumnButtonPressed:nil];
    }
    else if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
        [self moveRightColumnButtonPressed:nil];
    }
}

В таблице будут перечислены только те жесты, которые вы просили, после того, как они обработали их внутри.

Ответ 2

Если вам нужно знать свою ячейку indexPath:

- (void)handleSwipeFrom:(UIGestureRecognizer *)recognizer {
    CGPoint swipeLocation = [recognizer locationInView:self.tableView];
    NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
    UITableViewCell *swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
}

Об этом ранее говорилось в проблемах UIGestureRecognizer и UITableViewCell.

Ответ 3

Я попробовал предложение Роба Боннера, и он отлично работает. спасибо.

Но в моем случае есть проблема с распознаванием направления. (распознавание всегда направлено 3) Я использую IOS5 SDK и Xcode 4.

Кажется, это вызвано "[gesture setDirection: (left | right)]" Я думаю. (поскольку предопределенный (dir left | dir right) результат вычисления равен 3)

Итак, если у кого-то есть проблемы, подобные мне, и я хочу распознать прокрутку влево и вправо, затем назначьте два распознавателя для просмотра таблицы в разных направлениях.

Вот так:

UISwipeGestureRecognizer *swipeLeftGesture = [[UISwipeGestureRecognizer alloc] 
                                             initWithTarget:self
                                             action:@selector(handleSwipeLeft:)];
[swipeLeftGesture setDirection: UISwipeGestureRecognizerDirectionLeft];

UISwipeGestureRecognizer *swipeRightGesture = [[UISwipeGestureRecognizer alloc] 
                                              initWithTarget:self 
                                              action:@selector(handleSwipeRight:)];

[swipeRightGesture setDirection: UISwipeGestureRecognizerDirectionRight];

[tableView addGestureRecognizer:swipeLeftGesture];
[tableView addGestureRecognizer:swipeRightGesture];

и действие жестов ниже:

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer {
    [self moveLeftColumnButtonPressed:nil];
}

- (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer {
    [self moveRightColumnButtonPressed:nil];
}

Я закодирован с помощью функции ARC, а затем, если вы не используете ARC, добавьте коды выпуска.

PS: Мой английский не очень хорош, поэтому, если есть какая-либо условная ошибка, исправление будет очень приятно:)