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