图像视图没有响应触摸事件

Posted

技术标签:

【中文标题】图像视图没有响应触摸事件【英文标题】:Image view not responding to touch event 【发布时间】:2012-08-01 15:21:53 【问题描述】:

我有一个缩略图网格,当触摸其中一个时,我想显示整个图像。现在,我知道 UIImageView 不响应触摸事件,但正如this answer 中所建议的那样,我创建了一个 UIButton 来处理该事件。见以下代码:

- (void)displayImage

        NSUInteger i = 0; //  The actual code is different and works; this is just for brevity's sake.

        // UILazyImageView is a subclass of UIImageView
        UILazyImageView *imageView = [[UILazyImageView alloc] initWithURL:[NSURL URLWithString:[[[self images] objectAtIndex:i] thumbnailUrl]]];

        UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [imageButton setFrame:[imageView frame]];
        [imageButton addTarget:self action:@selector(imageTapped:) forControlEvents:UIControlEventTouchUpInside];
        [imageView addSubview:imageButton];

        [[self containerView] addSubview:imageView];
        [imageView release];
    


- (void)imageTapped:(id)sender

    NSLog(@"Image tapped.");

    // Get the index of sender in the images array 
    NSUInteger index = 0;  // Don't worry, I know.  I'll implement this later

    FullImageViewController *fullImageViewController = [[[FullImageViewController alloc] initWithImageURL:[NSURL URLWithString:[[[self images] objectAtIndex:index] url]]] autorelease];
    [[self navigationController] pushViewController:fullImageViewController animated:YES];

好的。所以我创建了一个自定义按钮,设置它的框架以匹配图像框架,告诉它响应内部的修饰以及如何响应,并将其添加到图像的子视图中。但是当我运行它时,我什么也得不到。 “图像被窃听”。没有出现在控制台中,所以我知道消息没有被发送。我在这里做错了什么?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

默认情况下,UIImageView 的 userInteractionEnabled 属性设置为 NO

添加这一行

imageView.userInteractionEnabled = YES;

【讨论】:

【参考方案2】:

试试

imageView.userInteractionEnabled = YES;

这是一个继承自 UIView 的属性,但根据 Apple 的文档,UIImageView 将其默认值更改为 NO,忽略所有事件。

【讨论】:

【参考方案3】:

除了设置imageView.userInteractionEnabled = YES之外,您还可以完全取消按钮,并在UIImageView中添加UITapGestureRecognizer来处理点击。它看起来像:

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
[imageView addGestureRecognizer:recognizer];

【讨论】:

以上是关于图像视图没有响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

scrollView 的底部内容没有响应触摸事件

UIButton 不响应触摸事件

Webview 不响应触摸事件

带有按钮的 iOS 子视图不响应触摸。

UIButton ImageView 在 iCarousel 中占用更多空间并且不响应触摸事件

1% 的时间没有处理 UIButton 事件:我应该在我的响应链中责备谁?