请看下面的图片:
我有一个自定义UIControl
作为RangeSlider
,我是按照this教程实现的。我将RangeSlider
置于可以滑入或滑出的FilterViewController
内。
在课程RangeSlider
上,当用户移动滑块指示符时,我使用UIControl
:beginTracking, continueTracking, endTracking
的3种方法来处理触摸事件。
在课程FilterViewController
上,我使用UIPanGestureRecognizer
来处理用户滑入或滑出时的触摸事件。
问题
当我尝试移动滑块指示器时,ViewController
也会移动。指标只是移动了一下。它似乎是子视图和父视图都接收到触摸事件。
问题
如何忽略父视图(ViewController
)接收触摸事件?
答案 0 :(得分:0)
您应该实现PanGestureRecognizer委托的方法
gestureRecognizerShouldBegin(_:)
编辑:请尝试
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else {
return true
}
return false
}
希望这有帮助。
答案 1 :(得分:0)
你可以在viewDidLoad()中写这个。
self.view.isUserInteractionEnabled = false
答案 2 :(得分:-1)
这应该在FilterViewController中有所帮助(假设它是触摸委托)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:self.tableView]) {
return NO;
}
return YES;
}
很抱歉,例如在objective-c中,您可以轻松将其转换为swift。这意味着您使用的表或滚动视图不会对其子视图的触摸作出反应(假设RangeSlider是表视图单元的后代子视图)。让我知道,如果这没有帮助,我通过几种不同的方式强迫过去这些问题!