swift isUserInteractionEnabled = false在UITapGestureRecognizer内部不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift isUserInteractionEnabled = false在UITapGestureRecognizer内部不起作用相关的知识,希望对你有一定的参考价值。
我在主视图中有一个UIScrollView和一个Header(UIView)并且我的Header像这样在我的UIScrollView上方时出现了问题:
UIView
|
|- UIScrollView
|
|- Header (UIView)
我希望标题能够检测到其上的点击,但是我也希望滚动到标题上方时滚动视图能够滚动,由于我的标题位于上方并且正在阻止标题,因此目前无法实现滚动。
所以看起来很简单吧?,我希望我的标题能够检测到水龙头,但是将滚动前进到我的UIScrollView。
为了解决这个问题,我尝试了多种方法,其中之一是:
- 向我的页眉添加UIPanGestureRecognizer,以便能够检测到拖动
- 将UITapGestureRecognizer添加到我的标题中,以便能够检测到轻敲
- 开始拖动时设置isUserInteractionEnabled = false,因此可以将手势传递给下一个UIResponder,在这种情况下为我的UIScrollView
- 设置isUserInteractionEnabled = true,一旦我的拖动完成,以便它可以再次检测到轻击
这是代码段:
override func viewLoad() {
myScreenEdgePanGestureRecognizer = UIPanGestureRecognizer(target: self, action:#selector(handlePan))
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action:#selector(handleTap(_:)))
headerView.addGestureRecognizer(myScreenEdgePanGestureRecognizer)
headerView.addGestureRecognizer(tapGestureRecognizer)
}
@objc func handlePan(_ sender: UITapGestureRecognizer){
print("dragging")
if headerView.isUserInteractionEnabled{
headerView.isUserInteractionEnabled = false
}
if sender.state == .began {
} else if sender.state == .ended {
headerView.isUserInteractionEnabled = true
}
}
@objc func handleTap(_ sender: UITapGestureRecognizer){
print("tapped")
}
此时,我看到如何很好地检测到拖动和点击,但是由于某种原因isUserInteractionEnabled = false似乎并没有改变视图的行为。此代码充当isUserInteractionEnabled始终为true,无论如何。
[除此之外,我还尝试过的事情:
- 覆盖UIButton覆盖内的hitTest函数
- touchesBegan,touchesMoved,touchesEnded方法覆盖下一个
- 返回ScrollView作为下一个UIResponder设置的变量
- UIButton中的isExclusiveTouch方法更改
- isUserInteractionEnabled以各种可能的方式
- 等,等等,等等...
我也在这个问题上也很挣扎,您应该尝试使用UIGestureRecognizerDelegate
的方法,该方法允许您同时处理手势。
- 连接您的手势识别器代表,例如
tapGestureRecognizer.delegate = self
- [使您的ViewController遵守此协议,例如
extension YourViewController: UIGestureRecognizerDelegate {}
实现此功能:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true }
以上是关于swift isUserInteractionEnabled = false在UITapGestureRecognizer内部不起作用的主要内容,如果未能解决你的问题,请参考以下文章
swift isUserInteractionEnabled = false在UITapGestureRecognizer内部不起作用
在哪里设置 NavigationController.NavigationBar.isUserInteractionEnabled
tvos swift spritekit - UITapGestureRecognizer 没有响应
navigationController?.navigationBar.isUserInteractionEnabled 未按预期工作