UIView 从 UITableView “窃取”触摸

Posted

技术标签:

【中文标题】UIView 从 UITableView “窃取”触摸【英文标题】:UIView "stealing" touch from UITableView 【发布时间】:2013-12-03 08:31:36 【问题描述】:

我有一个自动完成表,当用户在搜索栏按钮项中键入任何内容时,我创建了框架。 问题是,我希望能够在用户触摸它或表格外部时关闭表格视图,所以我自然地在主视图中添加了一个点击触摸识别器。

问题是,视图“劫持”了表格中的触摸,因此当您尝试触摸表格时它会关闭它(这非常有意义,因为表格是该 UIView 的子视图)

谁有任何聪明的解决方案? (我最初的预感是将 UITableView 放在视图窗口顶部的新窗口中,但如果有更优雅的东西我更喜欢)

【问题讨论】:

将您的 tableview 带到另一个类,在那里为其定义触摸事件并将该类作为子视图添加到第一个类 【参考方案1】:

也许你可以试试

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

    if ([touch.view.superview.superview isKindOfClass:[UITableView class]]) return NO;


    else return YES;

//初始化识别器

UIGestureRecognizer *gestureRecognizer;
gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[gestureRecognizer setCancelsTouchesInView:NO];
[self.view addGestureRecognizer:gestureRecognizer];
self.tapRecognizer = (UITapGestureRecognizer *)gestureRecognizer;
gestureRecognizer.delegate = self;
[gestureRecognizer release];

并为你的手势添加一些东西

- (void)handleTap:(UITapGestureRecognizer *)recognizer 


希望对你有帮助:)

【讨论】:

按下 tableview 时的视图实际上是 UITableViewContentView,所以如果你想获得一种类 UITable 视图,它的 touch.view.superview.superview。但现在我这样做了,它完美无缺。感谢您快速简单的回答。我接受了,请编辑更正。【参考方案2】:

你可以试试

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

行用户的表格视图选择方法会感觉用户选择了值 对于

对于表外使用 uiviews touch begin 方法并检查 rect CGRectContainsPoint(, )

【讨论】:

以上是关于UIView 从 UITableView “窃取”触摸的主要内容,如果未能解决你的问题,请参考以下文章

touchesEnded:withEvent: 没有从我的 UIView 调用,它位于 UITableView 的顶部

如何从通过情节提要创建的 UITableView 中提取 UIView?

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

如何从 ViewController 中的 xib (nib) 实例化 UIView / UITableView

从@IBDesignable UIView didSelectRowAt UITableView 导航到 ViewController

加载 UITableView 表单 UIView