1
我有一个UIToolbar与一些UIBarButtonItems和一个UITableView包含一些UITextFields的视图。点击UIBarButtonItem不会被TapGestureRecognizer忽略
我想解除键盘的任何地方的水龙头的文本。因此我在视图中添加了TapGestureRecognizer。为了避免TapgestureRecognizer处理UIBarButtonItems上的水龙头,我添加了以下方法(设置了委托)。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
UIView *view = touch.view;
while (view) {
NSLog(@"Class of view: %@", NSStringFromClass([view class]));
view = view.superview;
}
// Disallow recognition of tap gestures in the toolbar
if ([touch.view isKindOfClass:[UIToolbar class]]) {
return NO;
}
if ([touch.view.superview isMemberOfClass:[UIToolbar class]]) {
return NO;
}
return YES;
}
甲的UIBarButtonItem不是视图本身,但它有UIToolbar作为它的父。当我使用上述方法时,检查isKindOfClass:[UIToolbar类]似乎不适用于工具栏上的所有水龙头。然而,使用isMemberOfClass:[UIToolbar类]检查超级视图是有效的。
我不明白这一点。也许有人可以解释这种行为?
感谢您的提示,但它没有回答这个问题。使用NSLog语句,我可以看到UIToolbar位于水龙头位置的视图层次结构中。但isKindOfClass [UIToolbar类]返回NO。为什么? – Leontien
超视图链条是多少工具栏视图? – Wain
这是touch.view的超级视图:Touch.view.superview – Leontien