我在主视图中添加了一个子视图(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];
    }
}'

最佳答案

识别器的目标必须是self

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

您有上一个错误,因为您的tapView没有名为processTap的选择器。

注意

从Apple的文档中:

目标

一个对象,它是接收者在识别手势时发送的动作消息的接收者。 nil不是有效值。

因此,在这种情况下,您的操作的接收者是实现processTap选择器的控制器。

10-07 19:55