我有一个在其中添加了UITapGestureRecognizer的UIView
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
tapRecognizer.numberOfTapsRequired=1;
tapRecognizer.numberOfTouchesRequired=1;
[self.myView addGestureRecognizer:tapRecognizer];然后,我将一个带有按钮的UIToolBar添加到视图中:
UIToolbar *topBar = [[UIToolbar alloc ]initWithFrame:CGRectMake(0, 0, self.myView.frame.size.width, 44)];
topBar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *logout = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout)];
[topBar setItems:@[logout] animated:NO];我有一个问题,当我点击注销按钮,我的点击识别器触发,而不是我的注销操作。如果我点击并按住,那么注销操作就会触发(我猜是点击识别器失败了,所以让按钮操作触发)。
当按钮被按下时,我如何不触发手势识别器?
发布于 2013-02-19 13:12:12
只是遇到了同样的问题。因为我不想引入容器视图( UIToolbar应该覆盖我现有的视图)。在Patrick.Ji粗略地指出的帮助下,我想出了这个:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view.superview isKindOfClass:[UIToolbar class]]) {
return NO;
}
return YES;
}不要忘记将手势的委托设置为self
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *mainTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mainTapGesture:)];
mainTapGestureRecognizer.delegate = self;
[self.view addGestureRecognizer:mainTapGestureRecognizer];
}发布于 2012-12-21 02:20:37
检查点击识别器中的视图。如果是您的注销按钮,让触摸无法通过super将其传递到链上。
或者,确保工具栏不是视图的子视图。相反,让容器视图包含工具栏和内容视图,并将手势识别器添加到此内容视图中。
发布于 2012-12-23 13:43:31
实现UIGestureRecognizer的这个委托方法(记得设置tapRecognizer.delegate = self)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch: (UITouch *)touch {
if ([touch.view isKindOfClass:[UIBarButtonItem class]])
{
return NO;
}
return YES;
}https://stackoverflow.com/questions/13977973
复制相似问题