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

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

3 ответов


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

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];
    }
}

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


Если вам нужно знать 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) я использую iOS5 SDK и Xcode 4.

Кажется, это вызвано "[жест 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: мой английский не так хорош, поэтому, если есть какая-либо сентенциальная ошибка, исправление будет очень приятно:)