UITapGestureRecognizer initWithTarget:action:获取参数的方法?

Pet*_*rbo 11 objective-c uiscrollview uilabel ios uitapgesturerecognizer

我正在使用,UITapGestureRecognizer因为我正在使用UIScrollView它作为我UILabel的容器.基本上我正在尝试使用带有参数的动作方法,所以我可以例如向myLabel.tag动作方法发送值,以了解根据UILabel触发的动作采取的动作.

一种方法是使用尽可能多的动作方法,UILabel但这不是非常"漂亮"的代码.我想要实现的只是有一个带switch语句的action方法.

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

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
}
Run Code Online (Sandbox Code Playgroud)

hig*_*ted 18

将单个手势识别器添加到视图中,该视图是各种标签的超级视图:

UITapGestureRecognizer *myLabelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myLabelTapHandler:)];
[myLabelParent addGestureRecognizer:myLabelTap];
Run Code Online (Sandbox Code Playgroud)

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

-(void)myLabelTapHandler:(UIGestureRecognizer *)gestureRecognizer {
    UIView *tappedView = [gestureRecognizer.view hitTest:[gestureRecognizer locationInView:gestureRecognizer.view] withEvent:nil];

    // do something with it
}
Run Code Online (Sandbox Code Playgroud)


ser*_*gio 5

你可以只使用一个UITapGestureRecognizer和你的手势处理程序(你的myLaberXTap),它具有以下语法:

 - (void)handleGesture:(UITapGestureRecognizer*)gestureRecognizer {
     ...
 } 
Run Code Online (Sandbox Code Playgroud)

用于gesture.view了解您正在处理的视图.