UISwitch上的UILongPressGestureRecognizer不会触发

时间:2014-02-14 17:53:38

标签: ios objective-c cocoa-touch uigesturerecognizer uiswitch

今天我尝试向UILongPressGestureRecognizer添加额外的UISwitch,但这并没有真正起作用。我的代码如下:

UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(doSomething:)];
[lpgr setDelaysTouchesBegan:YES];
[lpgr setDelaysTouchesEnded:YES];
[lpgr setCancelsTouchesInView:YES];
[self.switcher addGestureRecognizer:lpgr];

viewDidLoad的{​​{1}}方法中,该方法是该切换的父viewController。 (切换器是一个实例变量,通过故事板设置。viewController从UISwitch正确设置到其viewController的switcherProperty。)

在其他几个控件(如IBOutlet等)上,即使没有取消或延迟触摸,也可以完美地触发目标方法。但是,通过我的开关,它拒绝了这种行为。

我已经尝试通过迭代该开关上的所有gestureRecognizer并调用UIButton, UISlider, UIStepper来删除UISwitch上的任何其他gestureRecognizer,我也将所有这些设置为要求我的longPressGestureRecognizer失败。其他类型的gestureRecognizers也不会触发。

据我了解,GestureRecognizers会在他们所属的视图或控件之前接收触摸。因此,[switcher removeGestureRecognizer: ... ]setCancelsTouchesInView:YES应该使gestureRecognizer能够处理每个单独的手势,直到它失败或成功,没有视图知道,对吗?

-------------- EDIT ------------------

我的方法的全部内容:

setDelaysTouchesInView:YES

正如我所说,对于其他控件,这是有效的,只有开关不想工作

1 个答案:

答案 0 :(得分:0)

尝试用它

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

// Disallow recognition of tap gestures in the segmented control.
if ((touch.view == yourSwitch)) {//change it to your condition
    return NO;
}
return YES;
}

确保您确认UIGestureRecognizerDelegate才能生效。