iphone - 带有 UIButton 和 UITapGestureRecognizer 的 UIScrollView

标签 iphone objective-c ios uibutton uitapgesturerecognizer

我一直在玩这个代码,但不能正确。

当前行为:即使在点击按钮时,我也可以在 UIScrollView 上自由滚动。当我点击不是按钮的东西时,它会调用一个方法(就像我想要的那样),这是 UITapGestureRecognizer 的结果。但是,我必须按住按钮几秒钟,然后触摸它以触发按钮的 UIControlEventTouchUpInside。

我想要发生的事情:完全一样,但是能够轻松地触摸 UIButton,就像我在它所在的 View 上关闭 UITapGestureRecognizer 一样。

这是我的代码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        //...

        [cell.xButton addTarget:self action:@selector(xButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

        self.delaysContentTouches = YES;

        UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
        [self addGestureRecognizer:tapGestureRecognizer];
        tapGestureRecognizer.delegate = self;
    }
}

- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
{
    [self.header removeKeyboard];
}

最佳答案

收藏 建议,您可以执行以下操作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    UIView* touchedView = [touch view];
    if([touchedView isKindOfClass:[UIButton class]]) {

       return NO;
    }

    return YES;
}

这在大多数情况下都有效。此外,您可能希望使用 isDescendantOfView: 检查触摸的 View 是否是 ScrollView 的后代。 .

希望能帮助到你。

关于iphone - 带有 UIButton 和 UITapGestureRecognizer 的 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153761/

相关文章:

ios - 在一个应用程序中显示其他应用程序列表

iphone - 返回一个静态常量[]

ios - UITableView beginUpdates/endUpdates 滚动时使滚动跳转

ios - 如何在 Objective-c 上的 .plist 文件中显示同一键的多个参数?

发布数据时,IOS8 参数未附加到 URL

objective-c - UIPickerView : Keyboard not hiding

ios - 使用 AVAssetImageGenerator 为长视频获取视频中的所有帧时应用程序崩溃

iphone - 如何通过代码设置UIImageView?

iphone - 我是否需要保护 iPhone 上的数据结构免受回调和计时器的影响?

iphone - 来自网页的响应没有改变 iPhone