【问题标题】:IOS/Objective-C: Pass Touch Event on ScrollView to View Below using HitTouchIOS/Objective-C:使用 HitTouch 将 ScrollView 上的触摸事件传递给 View below
【发布时间】:2018-01-14 16:03:37
【问题描述】:

我有一个错误,无法识别只能通过滚动到达的文本视图底部区域的触摸。使用可视化调试器,我发现滚动视图挡住了视图的底部。关于 SO 和一些 Apple 文档和 this excellent article here 的一些问题表明,当您有以下视图阻塞时,您需要实现以下方法的某个版本:

  - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    NSLog(@"hit test firing");
    UIView *hitTestView = [super hitTest:point withEvent:event];
    if (hitTestView == self) {
        hitTestView = nil;
    }
    return hitTestView;
}

-

但是,我对何时触发此方法以及视图是什么感到困惑。在上面的代码中,我将在哪里指定滚动视图是阻止我的文本视图?我也得到了上面代码的错误:没有可见的界面声明选择器 hitTestPointWithEvent

感谢您的任何建议。 这是可视调试器中的图像。蓝色表示未接收触摸(点击)事件。

【问题讨论】:

    标签: ios uigesturerecognizer hittest


    【解决方案1】:

    这个方法属于一个 UIView,你需要继承你的 UIScrollView。在根视图中的每次触摸时都会调用此方法。在我的测试中,这个方法总是被调用两次。

    请考虑,来自文档:

    “此方法忽略隐藏的、禁用用户交互或 alpha 级别小于 0.01 的视图对象。在确定命中时,此方法不考虑视图的内容。”

    【讨论】:

    • 你是说它不是委托方法?那么具体怎么称呼呢?
    • 一般你自己不会调用这个方法,你可以使用这个方法来隐藏子视图的触摸事件或者优化子视图的触摸事件。该方法基本上是操作系统调用的。继承 UIScrollView 并实现此方法,然后设置断点并查看每次触摸时都会调用此方法。调用 super 并将结果传回以不破坏功能。
    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 2019-08-09
    • 1970-01-01
    • 2015-10-04
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多