UITapGestureRecognizer initWithTarget:动作:方法采取参数?

我正在使用UITapGestureRecognizer因为我使用UIScrollView作为我的UILabel的容器。 基本上我试图用参数使用一个动作方法,所以我可以例如发送myLabel.tag值的行动方法知道要采取什么行动取决于已经触发了一个水龙头UILabel。

其中一种方法是使用与UILabel一样多的操作方法,但这不是代码方式的“漂亮”。 我想实现的只是一个具有switch语句的操作方法。

这是可能的,还是我必须这样做(叹气):

 UITapGestureRecognizer *myLabel1Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel1Tap)]; [myLabel1Tap addGestureRecognizer:myLabel1Tap]; UITapGestureRecognizer *myLabel2Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabel2Tap)]; [myLabel1Tap addGestureRecognizer:myLabel2Tap]; UITapGestureRecognizer *myLabelNTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelNTap)]; [myLabel1Tap addGestureRecognizer:myLabelNTap]; - (void)myLabel1Tap { // Perform action } - (void)myLabel2Tap { // Perform action } - (void)myLabelNTap { // Perform action } 

将一个手势识别器添加到您的各种标签的超视图视图:

 UITapGestureRecognizer *myLabelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelTapHandler:)]; [myLabelParent addGestureRecognizer:myLabelTap]; 

然后,当您处理手势时,确定哪个标签被点击:

 -(void)myLabelTapHandler:(UIGestureRecognizer *)gestureRecognizer { UIView *tappedView = [gestureRecognizer.view hitTest:[gestureRecognizer locationInView:gestureRecognizer.view] withEvent:nil]; // do something with it } 

您可以只使用一个UITapGestureRecognizer并在您的手势处理程序( myLaberXTap )中使用,其语法如下:

  - (void)handleGesture:(UITapGestureRecognizer*)gestureRecognizer { ... } 

使用gesture.view来知道你正在使用哪个视图。