UIGestureRecognizer和UITableViewCell问题

我将UISwipeGestureRecognizer附加到cellForRowAtIndexPath:方法中的UITableViewCell ,如下所示:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)]; gesture.direction = UISwipeGestureRecognizerDirectionRight; [cell.contentView addGestureRecognizer:gesture]; [gesture release]; } return cell; } 

但是, didSwipe方法总是在成功刷卡时被调用两次。 我最初认为这是因为手势开始和结束,但是如果我注销了gestureRecognizer本身,它们都处于“结束”状态:

 -(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer { NSLog(@"did swipe called %@", gestureRecognizer); } 

安慰:

 2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right> 2011-01-05 12:57:43.480 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right> 

我真的不知道为什么。 我试着明确地检查了Ended状态,但是没有任何帮助,因为它们都是以“Ended”的forms出现的…任何想法?

不是直接将手势识别器添加到单元格中,而是将其添加到viewDidLoad的tableview中。

didSwipe您可以确定受影响的IndexPath和单元格,如下所示:

 -(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { CGPoint swipeLocation = [gestureRecognizer locationInView:self.tableView]; NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation]; UITableViewCell* swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath]; // ... } } 

它将与应用程序委托一起工作

 - (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath { // code } 

我有这个相同的问题,并通过在表视图属性中勾选“滚动已启用”来解决它。

我的表格视图不需要滚动,所以它不会以任何其他方式影响应用程序,除了现在我没有在滑动手势之后得到第一个无响应的点击。