Objective c 将参数发送到手势识别器初始化选择器?

Objective c 将参数发送到手势识别器初始化选择器?,objective-c,ios,methods,selector,uitapgesturerecognizer,Objective C,Ios,Methods,Selector,Uitapgesturerecognizer,在我的程序中,我有一个UITapGestureRecognizer,我已经用initWithTarget:action:初始化了它。我传入了一个选择器,以调用名为PlanetTapped:(UIImageView*)aPlanet的方法。这调用的方法很好,但是我想知道如何将参数传递到action:中,就像使用performSelector:withObject一样。这有可能吗?允许您将参数发送到UIgestureRecognitor的选择器是有意义的。非常感谢您的帮助。要调用的方法的正确签名为:

在我的程序中,我有一个
UITapGestureRecognizer
,我已经用
initWithTarget:action:
初始化了它。我传入了一个选择器,以调用名为
PlanetTapped:(UIImageView*)aPlanet
的方法。这调用的方法很好,但是我想知道如何将参数传递到
action:
中,就像使用
performSelector:withObject
一样。这有可能吗?允许您将参数发送到
UIgestureRecognitor
的选择器是有意义的。非常感谢您的帮助。

要调用的方法的正确签名为:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer
然后,您可以通过调用以下命令访问接收手势的视图:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer {

    UIImageView* aPlanet = gestureRecognizer.view;
    ...
}
事实上,这就是所说的:

手势识别器具有一个或多个与其关联的目标动作对。如果存在多个目标操作对,则它们是离散的,而不是累积的。识别手势的结果是为每对手势向目标发送动作消息。调用的操作方法必须符合以下签名之一:

  • (无效)手感
  • (无效)手势识别器:(UIgestureRecognitor*)手势识别器

希望这些可以帮助您。

在Swift 3.0中,函数签名如下(在这些示例中,根据需要替换另一个手势识别器类):

设置手势识别器时,请参照此功能,如下所示:

longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:)))
if (sender.state == UIGestureRecognizerState.ended) {
    // Your code here
}
然后,要访问按下的视图(在我的例子中是一个按钮),请使用以下代码:

if let button = sender.view as? UIButton {
    // Your code here
}
最后,不要忘记该函数被多次调用(通常在手势开始和结束时),因此您需要检查状态,您可以按如下操作:

longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:)))
if (sender.state == UIGestureRecognizerState.ended) {
    // Your code here
}

啊,当然。我应该想到的。谢谢你的帮助!