我不清楚在哪里应该将UIGestureRecognizer代码添加到UITableViewCell的相应子视图中.我已经阅读了所有可以找到的相关问题.现在我的cell和cell的子视图在cellForRowAtIndexPath中生成.我试图用cellForRowAtIndexPath添加Gesture:
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [mySubview addGestureRecognizer:tapGesture]; tapGesture.cancelsTouchesInView = YES; tapGesture.delegate = self;
但是,这没有任何检测.为了验证我的UIGesture识别器是否正常工作,我在tableView本身上使用了上面的代码,它确实按预期注册了触摸.此外,当tableView附加了上面的手势时,下面的代码也按预期调用:
-(BOOL) gestureRecognizer:(UITapGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { NSLog(@"shouldRevceiveTouch"); return YES; } - (BOOL)gestureRecognizer:(UITapGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UITapGestureRecognizer *)otherGestureRecognizer { NSLog(@"simultaneously"); return YES; }
我试图从tableView和cellForRowAtIndexPath中删除GestureRecognizer我试图将GestureRecognizer附加到单元格本身,任何子视图,没有其他任何东西检测到触摸. (以上代码均未触发)
显然我错误地添加了GestureRecognizer.何时/何时是添加GestureRecognizer的合适位置/时间?
谢谢.
解决方法
我做过类似的事情,但它是UILongPressGestureRecognizer.我认为没有太大的区别(因为所有的触摸都是由UITableView接收的).我在控制器viewDidLoad方法(NOT IN单元格)中添加了手势识别器.
- (void) tableViewLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { CGPoint p = [gestureRecognizer locationInView:self.messageTableView]; NSIndexPath *indexPath = [self.messageTableView indexPathForRowAtPoint:p]; if (indexPath == nil) NSLog(@"long press on table view but not on a row"); else { UITableViewCell *cell = [self.messageTableView cellForRowAtIndexPath:indexPath]; CGPoint pointInCell = [cell convertPoint:p fromView:self.messageTableView]; } }
您可以将长按更改为常规按并自行尝试