我有一个带有一些UIBarButtonItem的UIToolbar和一个包含一些UITextField的UITableView的视图。
我想在任何地方点击一个文本字段的键盘。因此我在视图中添加了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检查superview:[UIToolbar class]。
我不明白这一点。也许有人可以解释这种行为?
答案 0 :(得分:0)
您不应该依赖私有视图类的视图层次结构。它可以随时改变。
更好的方法是将手势添加到表格视图(或代表您感兴趣的区域的其他适当视图)。请务必在适当的时间启用和禁用手势,以免阻止通常的表操作。