在iOS6中处理手势识别器

jtu*_*lla 14 uigesturerecognizer ios ios6

显然,当你有一个手势识别器并且UIButton在同一个地方时,iOS 6会尝试自动处理这种情况,并为同一个手势激活.

当您想要单击按钮而不是激活手势识别器时,这种新的自动处理解决了这个问题,但是当您希望手势识别器动作时会产生新的问题.

在iOS 5中,您可以实现:

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

将行动转移到UIButton冲突时.

这似乎在iOS 6中不起作用.此外,反转此方法的行为(因为现在UIButton具有优先权而不是手势识别器)将无法工作.


完整方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UIControl class]]){
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*unj 6

我这样做是为了解决这个问题,根据你的需要改变它:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      [self MyCommonSelector];// this will work for ios 5
      return Yes;
 }
Run Code Online (Sandbox Code Playgroud)

在您声明的按钮中添加目标,这将在iOS 6中调用:

[self.myButton addTarget:self action:@selector(MyCommonSelector)
  forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

在这个方法中做你的东西,也可以在按钮点击和你需要调用的手势上调用:

-(void)MyCommonSelector
 {
    //Do your stuff here what you want to do with Gesture too.
 }
Run Code Online (Sandbox Code Playgroud)