今天我尝试向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
正如我所说,对于其他控件,这是有效的,只有开关不想工作
答案 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
才能生效。