在子视图控制器上禁用点击手势?如何确定是PanGesture还是TapGesture?

Arp*_*ekh 4 xcode cocoa-touch objective-c uigesturerecognizer ios

所有。

在我的iOS 8.0应用中。

在父子视图架构中。通过此代码...

[self addChildViewController:slideTableViewController];
[self.view addSubview:slideTableViewController.view];
[slideTableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

我已经在Base View Controller上实现了TapGesturerecognizer和PanGesturerecognizer。

因此,它可以识别“平移(拖动)”和“点击”。我在BaseView上都需要两个手势。

只是不希望点击手势 SlideView。我想在子视图上执行didSelectRowAtIndexpath方法,

解:

问题1的 答案许多StackOverflow答案具有​​相同的基础。当触摸碰到子视图时,请禁用轻按手势。

if([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]){
                if(CGRectContainsPoint(slideTableViewController.view.frame,[touch locationInView:self.view])){
                    return NO;
     }
}
Run Code Online (Sandbox Code Playgroud)

回答问题2:

如何确定是PanGesture还是TapGesture?

对于每种手势类型,委托方法将调用

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
Run Code Online (Sandbox Code Playgroud)

如果您在视图中实现了两个手势,即平移手势和触摸手势,

此方法将调用2次,平移手势1次,轻击手势1次。

因此,在此方法中,您可以检查类似isKindOfClass方法。

非常感谢您的帮助……

在此处输入图片说明

art*_*dev 5

刚设定 tapGesture.cancelsTouchesInView = YES;