子视图上的手势识别器,获取错误

时间:2012-01-07 15:15:42

标签: ios uiimageview uigesturerecognizer

我的主视图中添加了子视图(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 个答案:

答案 0 :(得分:3)

识别器的目标必须是self

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

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

注意

来自Apple的文档:

  

     

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

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