Gesturerecognizer на подвиде, получая ошибку - PullRequest
1 голос
/ 07 января 2012

У меня есть подпредставление (UIImageView), добавленное к моему основному виду. Я хочу обнаруживать касания только в подпредставлении, а затем запустить метод 'processTap'.

При обнаружении щелчка я получаю следующее исключение.

«NSInvalidArgumentException», причина: «- [UIImageView processTap]: нераспознанный селектор отправлен на экземпляр "

Что-то не так с частью @selector.

Есть идеи?

- (void)viewDidLoad
{
  // Create a uiimage view, load image
  UIImageView *tapView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tap zone.png"]];
  tapView.frame = CGRectMake(20, 50, 279, 298);
  tapView.userInteractionEnabled = YES;

  [self.view addSubview:tapView];

  // Initialize tap gesture recognizers
  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
                                     initWithTarget:tapView 
                                     action:@selector(processTap)];
  singleTap.numberOfTapsRequired = 1;

  [tapView addGestureRecognizer:singleTap];

  [super viewDidLoad];
}

- (void)processTap {
    if (sessionRunning) {
        tapCounter = tapCounter + 1;
        _tapCount.text = [NSString stringWithFormat:@"%i",tapCounter];
    }
}'

1 Ответ

3 голосов
/ 07 января 2012

Цель вашего распознавателя должна быть self.

// Initialize tap gesture recognizers
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
                                     initWithTarget:self 
                                     action:@selector(processTap)];

У вас есть предыдущая ошибка, потому что ваш tapView не имеет селектора с именем processTap.

Примечание

Из документации Apple:

цель

Объект, который является получателем сообщений действий, отправленных получателем, когда он распознает жест. Ноль не является допустимым значением.

Итак, в этом случае получателем вашего действия является контроллер, реализующий селектор processTap.

...