Ios 处理多个点击事件

Ios 处理多个点击事件,ios,events,uigesturerecognizer,Ios,Events,Uigesturerecognizer,我有一个UIView,它附带了一个uitagesturerecognizer,当用户点击UITextFields外部时,我用它来隐藏键盘。现在,我还有一些标签,点击时会显示UIPickerView。标签还使用UITapgestureRecognitor。问题是,这些事件似乎会自行消失 点击我的标签时,是否可以同时执行两个事件处理程序 多谢各位 UITapGestureRecognizer* tapForUnit = [[UITapGestureRecognizer alloc] initWith

我有一个
UIView
,它附带了一个
uitagesturerecognizer
,当用户点击
UITextFields
外部时,我用它来隐藏键盘。现在,我还有一些标签,点击时会显示
UIPickerView
。标签还使用
UITapgestureRecognitor
。问题是,这些事件似乎会自行消失

点击我的标签时,是否可以同时执行两个事件处理程序

多谢各位

UITapGestureRecognizer* tapForUnit = [[UITapGestureRecognizer alloc] initWithTarget:self.fridgeItemUnit action:@selector(onTap)];
[self.fridgeItemUnit addGestureRecognizer:tapForUnit];
以上代码用于其中一个标签。我删除了视图的代码,因为我的标签将停止工作,但它完全相同,唯一不同的是它附加到
self.view
,执行的函数如下:

-(void)dismissKeyboard:(UIGestureRecognizer*)gesture {
    [self.fridgeItemName resignFirstResponder];
    [self.fridgeItemQuantity resignFirstResponder];
}

我将从
UIgestureRecognitizerDelegate
实现以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
我附上一个例子:

我在XIB上做的唯一一件事就是启用用户交互。下面是
UIViewController
.m

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];
    _viewRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTap:)];
    [_viewRecognizer setDelegate:self];
    _labelRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];
    [_labelRecognizer setDelegate:self];
    [self.view addGestureRecognizer:_viewRecognizer];
    [self.label addGestureRecognizer:_labelRecognizer];
}

- (void)viewDidUnload {

    [super viewDidUnload];
    [_viewRecognizer release]; _viewRecognizer = nil;
    [_labelRecognizer release]; _labelRecognizer = nil;
    self.label = nil;
}

- (void)dealloc {
    [_viewRecognizer release];
    [_labelRecognizer release];
    self.label = nil;
    [super dealloc];
}

- (void)labelTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"labelTap");
}

- (void)viewTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"viewTap");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    NSLog(@"shouldRecognizeSimultaneouslyWithGestureRecognizer");
    return YES;
}
然后,当点击标签时,我得到以下日志:

shouldRecognizeSimultaneouslyWithGestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
labelTap
viewTap
点击视图时:

viewTap

能否提供用于添加手势识别器和处理其事件的代码?它们是否都使用相同的选择器来处理事件?有两个不同的
uitappesturerecognizer
实例。查看我的编辑。您可以使用点击识别器来执行此操作。。。但是你为什么不制作标签和按钮呢?您可以使它们看起来完全相同,并且不必对按下的状态执行任何特殊操作,但是您可以注册一个目标操作回调。。。除非你需要区分长时间的新闻或其他事情,否则这可能是完成同样事情的最简单方法。我想你是对的。但是,我的设置为什么不能使用
UITapgestureRecognitizer
?它到底导致了什么错误?是应用程序崩溃了,还是你只是得到了一些奇怪的行为?如果崩溃,请发布崩溃日志。此方法用于同时识别单个视图的手势。由于识别器连接到容器和标签,因此它们不会冲突,也不需要此方法。就我所理解的问题而言,@Matt@Interfector我已经添加了一个我尝试过的例子,并且效果很好。我希望它与您的情况相匹配:主视图上的
uigesturecognizer
和子视图上的
uigesturecognizer
。有趣的是,手势识别器的行为似乎与基本触摸事件略有不同。很抱歉误传,谢谢你@Interfector,当您尝试此操作时,是否确保标签上的userInteractionEnabled为YES,并且对于两个代理回调都返回YES(如果您有两个不同的代理)?如果你仍然想使用标签而不是按钮,这应该是一个可行的解决方案。我回家后会试试。希望我错过了什么:)我觉得我做了和你一样的事。。。显然我没有:)谢谢你们所有人的详细解释。