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

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

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

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

【问题讨论】:

  • 将您的 tableview 带到另一个类,在那里为其定义触摸事件并将该类作为子视图添加到第一个类

标签: ios objective-c uitableview uiview uiwindow


【解决方案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(, )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多