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