Распознаватели жестов и TableView - PullRequest
13 голосов
/ 16 декабря 2010

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

Ответы [ 3 ]

31 голосов
/ 21 января 2012

Если вам нужно знать 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 .

30 голосов
/ 16 декабря 2010

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

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

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

7 голосов
/ 28 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...