繁体   English   中英

iOS如何在子视图处理后忽略父视图接收触摸事件

[英]iOS how to ignore parent view receive touch event after child view handle it

请看下面的图片:

在此输入图像描述

我有一个自定义的UIControl作为RangeSlider ,我按照教程实现。 我将RangeSlider放在一个可以滑入或滑出的FilterViewController中。

在类RangeSlider我使用了3种UIControl方法: beginTracking, continueTracking, endTracking来处理用户移动滑块指示器时的触摸事件。

在类FilterViewController我使用UIPanGestureRecognizer来处理用户滑入或滑出时的触摸事件。

问题

当我尝试移动滑块指示器时, ViewController也会移动。 指标只是移动了一下。 它似乎是子视图和父视图都接收触摸事件。

如何忽略父视图( ViewController )接收触摸事件?

您应该实现PanGestureRecognizer委托的方法

gestureRecognizerShouldBegin(_ :)

编辑:请试试

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else {
        return true
    }
    return false
}

希望这可以帮助。

你可以在viewDidLoad()中写这个。

self.view.isUserInteractionEnabled = false

这应该有助于FilterViewController(假设它是触摸委托)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isDescendantOfView:self.tableView]) {
        return NO;
    }

    return YES;
}

很抱歉,例如在objective-c中,您可以轻松将其转换为swift。 这意味着您使用的表或滚动视图不会对其子视图的触摸作出反应(假设RangeSlider是表视图单元的后代子视图)。 让我知道,如果这没有帮助,我通过几种不同的方式强迫过去的这些问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM