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(如果您有两个不同的代理)?如果你仍然想使用标签而不是按钮,这应该是一个可行的解决方案。我回家后会试试。希望我错过了什么:)我觉得我做了和你一样的事。。。显然我没有:)谢谢你们所有人的详细解释。