在iOS上,是否有一种方法可以将addTarget方法添加到UIImageView中?

3
我刚刚发现一个UIButton对象有一个addTarget方法来处理UI事件,但是UIImageView对象没有这样的方法,所以我们不能在代码中使用它,也不能为UIImageView对象使用Interface Builder添加此类操作。可以使用手势识别器,但是否有一种简单的方法来添加addTargetUIImageView,以便我们的代码不是部分由手势识别器处理,部分由addTarget方法处理呢?

2
为什么不直接使用带有背景图像的按钮? - wattson12
同意@wattson12的观点:任何其他解决方案都只是过于复杂化了。如果需要在点击时发生某些事情,将其制作为UIButton,并将原先在UIImageView中的图像设置为按钮的所有控件状态下的图像即可。 - WendiKidd
那么按钮看起来会和图片完全一样,只不过可以被点击吗?我想可能会有副作用,比如在触摸时颜色反转,但根据情况实际上可能是可取的。 - Jeremy L
UIButton允许您为每个状态选择一张图片,因此您可以设置普通图像和高亮图像(如果您想要不同的效果)。如果您只提供标准图像,则UIButton将默认在按钮图像上添加一个变暗的alpha效果。 - wattson12
2个回答

7

添加手势识别器调用与您的按钮相同的选择器不应该很麻烦:

UIButton *button = [[UIButton alloc] init];
[button addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[[self view] addGestureRecognizer:tapRecognizer];


- (void)tapped:(id)sender {}

啊哈,我的原始担忧是我不想让一些UI由addTarget处理,而另一些则由手势识别器处理... - Jeremy L

0

因为UIImageView不是UIControl的子类(UIButton的超类),所以我的解决方案是模拟UIControl的行为,添加一个轻拍手势并创建一个addTarget:action方法到自定义的UIImageView中,这样它就会像其他UIControl类一样。

我创建了一个名为SWImageView的UIImageView子类,在头文件中:

- (void)addTarget:(id)target action:(SEL)action;

在主文件中:

- (void)addTarget:(id)target action:(SEL)action
{
    if (tapGestureRecognizer!=nil) {
        [self removeGestureRecognizer:tapGestureRecognizer];
    }
    tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:target action:action];
    [self addGestureRecognizer:tapGestureRecognizer];
}    

不要忘记启用用户交互:

self.userInteractionEnabled = YES;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接