图像视图没有响应触摸事件
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];
【讨论】:
以上是关于图像视图没有响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章