【问题标题】:How to handle a tapping on non-cell area of UITableView如何处理对 UITableView 的非单元格区域的点击
【发布时间】:2014-05-24 17:25:16
【问题描述】:

我有一个UITableView,里面有几个UITableViewCells。因为我只有几个单元格,所以表格视图中有一个区域没有被单元格覆盖。当点击空白区域时,我想做一些事情。

我尝试在表格视图上添加UITapGestureRecognizer。它检测到对空白区域的敲击,但随后单元格无法响应敲击。我尝试在表格视图的超级视图上添加点击手势识别器,但结果是一样的。

一定有办法做到这一点,但我还不能完全弄清楚。有什么办法可以实现我想做的吗?

【问题讨论】:

  • 您到底想达到什么目的?为什么要检测对空白区域的点击?
  • @sha,我在其中一个单元格中有一个文本字段。在文本字段编辑过程中,如果用户点击空白区域,我想退出编辑模式。
  • @carl 这不是重复的,因为我不是在谈论在表格视图下添加按钮。
  • @Jake 问题不同,没关系,但解决方案可能是相同的 - 即使用空白空间大小的表格页脚视图 - 你试过了吗?不工作?

标签: ios objective-c uitableview uitapgesturerecognizer


【解决方案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 或其他一些自定义视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多