2014-01-23 109 views
0

我有一个麻烦瓦特/从表格单元传递水龙头tableView或说起来容易didSelectRowAtIndexPath不叫。我建立了自定义UITableViewCell。它有两个手势识别didSelectRowAtIndexPath; UITapGestureRecognizer;自定义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=NOdidSelectRowAtIndexPath不叫。 此外,我关闭了单元格内所有对象的交互。像

userInteractionEnabled = NO 

但它没有帮助。似乎tableview没有得到触摸... 另一方面,细胞手势识别器内部工作良好。

有没有人有任何想法didSelectRowAtIndexPath不工作的原因是什么?
在此先感谢。

编辑:看来问题不在UIGestureRecognizer。我试图将它们都删除,但它没有帮助。 UITableView得到平移手势(因为工作滚动),但点击手势消失...
有没有什么方法可以调试手势事件?

回答

0

你可以试试这个..

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

UIGestureRecognizer属于UITableViewCell。这种情况总是如此。 – user3124812

+0

你在哪里为你的手机添加手势?你为什么这样做? – Mani

+0

@ user3124812好吧。根据你的观点,你想一次打电话给两位代表?我对吗? – Mani

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

+0

实际上我已经讨论过这种方法,但我想应该是另一种更简单的方法。例如,单元格的手势识别器将事件传递给uitableview。我可以看到它,因为tableview滚动... – user3124812

+0

另一个变种是找到tableView作为单元格的父视图。它应该是self.superview或self.superview.superview取决于iOS版本。然后直接调用didSelectRowAtIndexPath。但在这种情况下,您需要将indexPath作为属性传递给每个单元格,以便使用正确的indexPath进行回调。 – malex

+0

说实话,我已经实现了这个选项:)但问题仍然打开。这个Tap事件在哪里? – user3124812