2012-05-25 7 views
2

Я только что обнаружил, что объект UIButton имеет метод addTarget для обработки событий пользовательского интерфейса, но объект UIImageView не имеет такого метода, поэтому мы не можем сделать это в коде и не можем добавить такое действие с помощью интерфейса Builder для объекта UIImageView. Может использоваться распознаватель жестов, но есть ли простой способ добавить addTarget в UIImageView, чтобы наш код частично не обрабатывался распознавателем жестов и частично обрабатывался методом addTarget?На iOS, есть ли способ добавить метод addTarget в UIImageView?

+2

Почему бы просто не использовать кнопку с фоновым изображением? – wattson12

+0

Согласитесь с @ wattson12: любое другое решение просто чрезмерное. Если что-то должно произойти при щелчке, сделайте его UIButton и настройте образ, который был в вас UIImageView, как образ кнопки для всех состояний управления. – WendiKidd

+0

, чтобы кнопка выглядела точно так же, как изображение, кроме того, что оно поддается отображению? Я предполагаю, что могут быть побочные эффекты, такие как изменение цвета изображения при касании, но это может быть действительно желательно в зависимости от ситуации. –

ответ

6

Это не должно быть много проблем, чтобы добавить жест распознаватель, который вызывает тот же селектор, что ваши кнопки вызовы:

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 {} 
+0

aha, моя первоначальная проблема заключалась в том, что я не хотел, чтобы какой-то пользовательский интерфейс обрабатывался 'addTarget', а некоторые обрабатывались распознавателями жестов. , –

0

Поскольку UIImageView не является подклассом UIControl (который является суперкласс UIButton), поэтому мое решение состоит в том, чтобы подделать поведение UIControl с жесткой меткой и создать метод addTarget: action для пользовательского UIImageView, чтобы он выглядел как другие классы UIControl.

Я создал подкласс UIImageView называется SWImageView, в заголовке:

- (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; 
Смежные вопросы