请看下面的图片:
我有一个定制的UIControl
作为RangeSlider
,我按照这教程实现了它。我把RangeSlider
放在一个FilterViewController
中,它可以滑进或滑出。
在RangeSlider
类中,我使用了3种UIControl
方法:当用户移动滑块指示器时,使用beginTracking, continueTracking, endTracking
来处理触摸事件。
在类FilterViewController
上,我使用UIPanGestureRecognizer
来处理用户进出时的触摸事件。
问题
当我试图移动滑块的指示器时,ViewController
也会移动。这个指示器只是移动了一点。它似乎既是子视图,也是父视图接收触摸事件。
问题
如何忽略父视图(ViewController
)接收触摸事件?
发布于 2017-02-06 23:30:09
应该实现PanGestureRecognizer委托的方法
gestureRecognizerShouldBegin(_:)
编辑:请尝试
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else {
return true
}
return false
}
希望这能有所帮助。
发布于 2017-02-07 00:25:29
您可以用viewDidLoad()编写它。
self.view.isUserInteractionEnabled = false
发布于 2017-02-07 02:34:06
这在FilterViewController内部会有所帮助(假设它是touch委托)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:self.tableView]) {
return NO;
}
return YES;
}
对不起,例如在目标-c中,您可以很容易地将其转换为“快速”。这意味着您使用的表或滚动视图不会对其子视图的触摸做出反应(假设RangeSlider是表视图单元格的后代子视图)。让我知道,如果这没有帮助,我强迫这些问题在过去的几种不同的方式!
https://stackoverflow.com/questions/42081512
复制