我刚发现UIButton
对象有一个方法addTarget
来处理UI事件,但UIImageView
对象没有这样的方法,所以我们不能这样做在代码中,并且无法使用Interface Builder为UIImageView
对象添加此类Action。可以使用手势识别器,但有一种简单的方法可以将addTarget
添加到UIImageView
,这样我们的代码就不会被手势识别器部分处理,而是部分由addTarget
方法处理?< / p>
答案 0 :(得分: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 {}
答案 1 :(得分:0)
因为UIImageView不是UIControl的子类(这是UIButton的超类),所以我的解决方案是伪造具有轻击手势的UIControl的行为并为自定义UIImageView创建addTarget:action方法,所以它将看起来像其他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;