我有一个UIView
附加了UITapGestureRecognizer
,用于在用户点击UITextFields
之外时隐藏键盘。现在,我还有一些标签,当点按时显示UIPickerView
。标签也使用UITapGestureRecognizer
。问题在于这些事件似乎是在can自己。
点击我的标签时是否可以执行这两个事件处理程序?
谢谢。
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];
}
答案 0 :(得分:2)
我会从UIGestureRecognizerDelegate
实现以下方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
我附上一个例子:
我在XIB上做的唯一一件事就是启用了用户交互。这是.m
的{{1}}:
UIViewController
然后点击标签时,我会得到以下日志:
@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