3

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

4

2 回答 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 {}
于 2012-05-25T19:10:07.363 回答
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;
于 2014-12-31T16:58:40.273 回答