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