今天项目开发过程中碰到了如何点击某区域以外的区域来关闭这个区域的问题,比如我们点一个按钮,弹出一个视图,但是想通过点击此区域以外的地方来关闭这个区域。
通过加手势加到self.view上,而self.view 上面已经addsubview了很多subview,那么这些subview也能响应这个手势。
也就是说,如何点击某区域以外的区域来关闭这个区域的问题变为如何让一部分区域响应手势,而一部分区域不响应手势的问题。
方法如下:
通过实现
UIGestureRecognizerDelegate协议的- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.viewisDescendantOfView:forgotPasswordView]|| [touch.viewisDescendantOfView:aboutView]|| [touch.viewisDescendantOfView:setView] || [touch.viewisDescendantOfView:mediaTransTypeSetView]) //forgotPasswordView等为不想响应手势的subview
returnNO;
else
returnYES;
}