在我的iPhone应用程序中,我有一个消息屏幕。我已经在UIViewController上添加了UITapGestureRecognizer,而且我在屏幕上也有一个UITableview。我想选择UITableViewCell,但由于UITapGestureRecognizer的原因,我无法选择UITableView。当我触摸屏幕时,只会调用点击手势操作,但不会调用UITableView委托didSelectRowAtIndexPath:。谁能帮我在敲击手势和UITableView:didSelectRowAtIndexPath:上工作。提前谢谢。
发布于 2012-08-13 23:18:09
虽然我更喜欢Matt Meyer的建议或我的其他使用自定义手势识别器的建议,但另一个不涉及自定义手势识别器的解决方案是让您的点击手势识别器识别您是否点击了表视图中的单元格,如果是,则手动调用didSelectRowAtIndexPath,例如:
- (void)handleTap:(UITapGestureRecognizer *)sender
{
CGPoint location = [sender locationInView:self.view];
if (CGRectContainsPoint([self.view convertRect:self.tableView.frame fromView:self.tableView.superview], location))
{
CGPoint locationInTableview = [self.tableView convertPoint:location fromView:self.view];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:locationInTableview];
if (indexPath)
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
return;
}
// otherwise proceed with the rest of your tap handling logic
}这是次优的,因为如果您正在对表视图做任何复杂的操作(例如,在单元格编辑、自定义控件等方面),您将丢失该行为,但如果您只是希望接收didSelectRowAtIndexPath,则这可能会完成工作。另外两种方法(独立视图或自定义手势识别器)可以让您保留完整的表视图功能,但如果您只需要一些简单的功能,而不需要表视图的其他内置功能,则可以使用此方法。
发布于 2012-08-13 21:46:29
您可以使用TagGesture委托:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:yourTableView]) {
return NO;
}
return YES;
}希望这能有所帮助。
发布于 2012-08-13 21:59:56
一种更简单的方法是使用两个视图:一个包含您希望点击手势打开的视图,另一个包含表格视图。您可以将UITapGestureRecognizer附加到您希望它工作的视图上,这样它就不会阻塞您的UITableView。
https://stackoverflow.com/questions/11935440
复制相似问题