如何处理对 UITableView 的非单元格区域的点击
Posted
技术标签:
【中文标题】如何处理对 UITableView 的非单元格区域的点击【英文标题】:How to handle a tapping on non-cell area of UITableView 【发布时间】:2014-05-24 17:25:16 【问题描述】:我有一个UITableView
,里面有几个UITableViewCells
。因为我只有几个单元格,所以表格视图中有一个区域没有被单元格覆盖。当点击空白区域时,我想做一些事情。
我尝试在表格视图上添加UITapGestureRecognizer
。它检测到对空白区域的敲击,但随后单元格无法响应敲击。我尝试在表格视图的超级视图上添加点击手势识别器,但结果是一样的。
一定有办法做到这一点,但我还不能完全弄清楚。有什么办法可以实现我想做的吗?
【问题讨论】:
您到底想达到什么目的?为什么要检测对空白区域的点击? Add buttons under a tableview的可能重复 @sha,我在其中一个单元格中有一个文本字段。在文本字段编辑过程中,如果用户点击空白区域,我想退出编辑模式。 @carl 这不是重复的,因为我不是在谈论在表格视图下添加按钮。 @Jake 问题不同,没关系,但解决方案可能是相同的 - 即使用空白空间大小的表格页脚视图 - 你试过了吗?不工作? 【参考方案1】:试试这个: 初始化并将 UITapGestureRecognizer 添加到您的 tableView:
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
gr.delaysTouchesBegan = YES;
gr.delegate = self;
[_tableView addGestureRecognizer:gr];
实现手势识别器委托方法:
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
CGPoint tapPoint = [gestureRecognizer locationInView:_tableView];
UIView * clickedView = [_tableView hitTest:tapPoint withEvent:nil];
NSString *viewClassName = NSStringFromClass(clickedView.class);
return ![viewClassName hasPrefix:@"UITableViewCell"];
这样,您在单元格外(但在表格视图内)所做的每一次点击都将被您的UITapGestureRecognizer
识别
【讨论】:
我正在使用自定义 UITableViewCells ios 8,我的类名是“UITableViewCellContentView”【参考方案2】:最后一行:return ![viewClassName hasPrefix:@"UITableViewCell"];
应该更改为return [viewClassName hasPrefix:@"UITableView"];
,因为您单击的单元格不必是 UITableViewCell,而是 UIView 或其他一些自定义视图
【讨论】:
以上是关于如何处理对 UITableView 的非单元格区域的点击的主要内容,如果未能解决你的问题,请参考以下文章