Ios didSelectRowAtIndexPath;UITAPPgestureRecognitor;自定义UITableViewCell

Ios didSelectRowAtIndexPath;UITAPPgestureRecognitor;自定义UITableViewCell,ios,uitableview,didselectrowatindexpath,Ios,Uitableview,Didselectrowatindexpath,我遇到了一个问题,将点击从表格单元格传递到tableView,或者无法调用轻松的didSelectRowAtIndexPath 我创建自定义UITableViewCell。它有两个手势识别器 UIGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; panRecognizer.delegate = self; [se

我遇到了一个问题,将点击从表格单元格传递到
tableView
,或者无法调用轻松的
didSelectRowAtIndexPath

我创建自定义
UITableViewCell
。它有两个手势识别器

UIGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
panRecognizer.delegate = self;
[self addGestureRecognizer:panRecognizer];
panRecognizer.cancelsTouchesInView = NO;

UIGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.delegate = self;
[self addGestureRecognizer:tapRecognizer];
tapRecognizer.cancelsTouchesInView = NO;


但是,尽管未调用
cancelsTouchesInView=NO
didSelectRowAtIndexPath
,但问题仍然存在。 此外,我关闭了细胞内所有对象的交互。像

userInteractionEnabled = NO
但这没用。似乎tableview没有联系到。。。 另一方面,细胞内手势识别器工作良好

有人知道
didSelectRowAtIndexPath
不起作用的原因是什么吗
提前谢谢。

编辑:问题似乎不在
UIgestureRecognitor
中。我试着把它们都去掉,但没用<代码>UITableView获取平移手势(因为工作滚动),但点击手势消失
有什么方法可以调试手势事件吗?

您可以试试这个

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
  if ([gestureRecognizer view] isKindOfClass:[UITableViewCell class]
       return NO;
  return YES;
}

每次需要在TableViewCell中定义自定义难处理元素时,都需要编写协议UITableViewCellDelegate,并将表指定为每个单元格的委托

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableViewCellIdentifier forIndexPath:indexPath];

    cell.delegate = self;

    . . . . . . . 
 }


- (void) tableViewCell:(UITableViewCell*)tableViewCell gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer
{
    CGPoint locationInCell = [gestureRecognizer locationInView: tableViewCell];

    . . . . . . .
}
这里类型是交互类型的枚举-点击或平移


然后,您需要在handlePan和handleTap单元格方法中以适当的类型调用此协议方法。

UIgestureRecognitor属于UITableViewCell。此条件始终为真。您在哪里向手机添加手势?你为什么这么做?@user3124812好吧。根据你的观点,你想一次呼叫两名代表?我说得对吗?他们两个都醒了。平移手势用于单元格的水平滚动,点击手势用于定义在单元格上的点击…同时,GestureRecognitizerShouldBegin()应返回NO以将事件传递给下一个对象。。。事实上,我已经考虑过这种方法,但我想应该是另一种更简单的方法。例如,单元格的平移手势识别器将事件传递给uitableview。我可以看到它,因为tableview滚动…另一个变体是找到tableview作为单元格的父视图。它应该是self.superview或self.superview.superview,具体取决于iOS版本。然后直接调用DidSelectRowatineXpath。但在这种情况下,您需要将indexPath作为属性传递给每个单元格,以便使用正确的indexPath进行回调。这个点击事件在哪里?我的意思是什么对象得到这个事件。描述的委托可以返回tableViewCell和识别器本身。我认为你主要需要一个接触点事件(对象+事件)。使用locationInView:方法获取点。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableViewCellIdentifier forIndexPath:indexPath];

    cell.delegate = self;

    . . . . . . . 
 }


- (void) tableViewCell:(UITableViewCell*)tableViewCell gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer
{
    CGPoint locationInCell = [gestureRecognizer locationInView: tableViewCell];

    . . . . . . .
}