繁体   English   中英

TapGestureRecognizer不会忽略对UIBarButtonItem的点击

[英]Tap on UIBarButtonItem is not ignored by TapGestureRecognizer

我有一个带有UIToolbar的视图,其中包含一些UIBarButtonItems和一个包含一些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 class]的检查似乎不适用于工具栏上的所有轻按。 但是,使用isMemberOfClass:[UIToolbar class]检查超级视图是可行的。

我不明白 也许有人可以解释这种行为?

您不应该依赖私有视图类的视图层次结构。 它可以随时更改。

更好的方法是将手势添加到表格视图(或代表您感兴趣的区域的其他适当视图)中。 只需确保在适当的时间启用和禁用手势即可,以免阻止常规的表格操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM