UITapGestureRecognizer 和 UIBarButtonItem.action 事件冲突

UITapGestureRecognizer 和 UIBarButtonItem.action 事件冲突

  • UITapGestureRecognizer在整个UIView上
  • UIToolbar在UIView上

解决方案
实现 UIGestureRecognizerDelegate ,并设置 UITapGestureRecognizer 的 delegate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
extension XXXX: UIGestureRecognizerDelegate {
// MARK: UIGestureRecognizerDelegate

/*
此方法在window对象在有触摸事件发生时,
调用gesture recognizer的touchesBegan:withEvent:方法之前调用,
如果返回NO,则gesture recognizer不会看到此触摸事件。(默认情况下为YES).
*/
func gestureRecognizer(
gestureRecognizer: UIGestureRecognizer,
shouldReceiveTouch touch: UITouch
) -> Bool {
/*
UIView ---> UIToolbar ---> UIBarButtonItem ---> action
touch.view is UIToolbarTextButton
touch.view?.superview is UIToolbar
*/
if touch.view?.superview is UIToolbar {
return false
}else{
return true
}
}
}

本文标题:UITapGestureRecognizer 和 UIBarButtonItem.action 事件冲突

文章作者:史彦超

发布时间:2016年10月11日 - 22:10

最后更新:2021年07月20日 - 16:07

原始链接:https://doingself.github.io/2016/10/11/2016-10-11-UITapGestureRecognizer%E5%92%8CUIBarButtonItem.action%20%E4%BA%8B%E4%BB%B6%E5%86%B2%E7%AA%81/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Donate comment here