按下按钮(子视图)时不要在超级视图上处理平移手势

Posted

技术标签:

【中文标题】按下按钮(子视图)时不要在超级视图上处理平移手势【英文标题】:Don't handle pan gesture on superview when touchdown button (subview) 【发布时间】:2016-04-26 09:38:10 【问题描述】:

我有一个可以通过平移手势移动的视图(超级视图),该视图具有带有 TouchDown 事件的子视图(UIButton)。但是当我按下按钮(已处理触地事件)并继续移动手指时,我的超级视图开始处理平移手势方法。 当我触摸它的子视图时如何禁用处理超级视图的平移手势方法?

【问题讨论】:

【参考方案1】:

要禁用 UIView 的子视图上的触摸事件,您可以将此扩展添加到 UIViewController

extension UIViewController:UIGestureRecognizerDelegate 
    func hideKeyboardWhenTappedAround() 
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
        tap.delegate = self
    

    func dismissKeyboard() 
        view.endEditing(true)
    
    public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool 
       if (touch.view!.isDescendantOfView(self.view) && touch.view != self.view)
            return false
        
        return true
    

【讨论】:

以上是关于按下按钮(子视图)时不要在超级视图上处理平移手势的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 子视图在缩放后无法识别平移手势

是否可以在按钮上启动滚动视图平移手势

无法在其父视图之外平移手势较小的 UIView

如何通过让子视图 UIButton 获取新闻事件?

如何将手势识别器从一个视图传递到另一个视图

在 iOS Swift 中使用键盘平移手势处理文本输入视图移动