didSelectRowAtIndexPath方法; UITapGestureRecognizer;自定义UITableViewCell

时间:2014-01-23 05:48:38

标签: ios uitableview didselectrowatindexpath

我遇到了从表格单元格传递到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;


-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}


但是,尽管cancelsTouchesInView=NO didSelectRowAtIndexPath没有被调用,但问题仍然存在。 而且我关闭了细胞内所有物体的相互作用。像

userInteractionEnabled = NO

但它没有帮助。似乎tableview没有触及...... 另一方面,单元格手势识别器内部工作正常。

有没有人有任何想法didSelectRowAtIndexPath无法工作的原因是什么?
提前致谢。

编辑:似乎问题不在UIGestureRecognizer中。我试图删除它们,但它没有帮助。 UITableView得到平移手势(因为工作滚动),但是点击手势消失了......
有没有办法调试手势事件?

2 个答案:

答案 0 :(得分:2)

每次需要在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单元格方法中使用适当的类型调用此协议方法。

答案 1 :(得分:0)

你可以试试这个..

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