如何处理对 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 的非单元格区域的点击的主要内容,如果未能解决你的问题,请参考以下文章

WPF 如何处理对空对象属性的绑定?

Falcor 模型如何处理对字符串的引用?

UITableView 里面的 UICollecionView。如何处理选择?

c#:如何处理对对象进行深度拷贝

如何处理对客户端反应应用程序的外部重定向?

postgres 如何处理对某些列具有假值的视图的查询?