显然,iOS 6尝试自动处理这种情况,当您在同一个地方有一个手势识别器和一个UIButton,为相同的手势被激活.
当您想要单击按钮而不是激活手势识别器时,这种新的自动处理解决了问题,但是当您想要手势识别器行动时会产生新问题.
在iOS 5中可以实现:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
在冲突中将动作转移到UIButton.
这在iOS 6中似乎不起作用.此外,反转此方法的行为(因为现在UIButton具有优先级而不是手势识别器)将无法正常工作.
完成方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UIControl class]]){ return NO; } return YES; }
解决方法
我已经做到这一点解决了这个问题,根据你的需要改变它:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { [self MyCommonSelector];// this will work for ios 5 return Yes; }
[self.myButton addTarget:self action:@selector(MyCommonSelector) forControlEvents:UIControlEventTouchUpInside];
用这种方式做你的东西,这个方法也可以通过按钮点击和你需要调用的手势来调用:
-(void)MyCommonSelector { //Do your stuff here what you want to do with Gesture too. }