【问题标题】:Sending arguments to gesture recognizer initialization selector?向手势识别器初始化选择器发送参数?
【发布时间】:2012-05-19 22:43:18
【问题描述】:

在我的程序中,我有一个UITapGestureRecognizer,我已经用initWithTarget: action: 对其进行了初始化。我传入了一个选择器来调用名为PlanetTapped: (UIImageView *)aPlanet 的方法。这很好地调用了该方法,但是我想知道如何将参数传递给action:,就像使用performSelector: withObject 一样。这是可能的吗?允许您向UIGestureRecognizer 的选择器发送参数是有意义的。任何帮助表示赞赏。

【问题讨论】:

    标签: objective-c ios methods selector uitapgesturerecognizer


    【解决方案1】:

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

    -(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer
    

    然后你可以通过调用来访问接收到手势的视图:

    -(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer {
    
        UIImageView* aPlanet = gestureRecognizer.view;
        ...
    }
    

    确实,UIGestureRecognizer reference 是这么说的:

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

    • (void)handleGesture;
    • (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

    【讨论】:

    • 啊,当然。我早该想到的。感谢您的帮助!
    【解决方案2】:
    - (void)viewDidLoad
    {
    UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnPhotos:)];
    [yourView addGestureRecognizer:longPressRecognizer];
    }
    
    
    
    - (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender{
    // use "sender.view" to get the "yourView" you have long pressed
    }
    

    希望这些对您有所帮助。

    【讨论】:

      【解决方案3】:

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

      func myButtonLongTouch(_ sender: UILongPressGestureRecognizer)
      

      您在设置手势识别器时引用此函数,如下所示:

      longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:)))
      

      然后,要访问被按下的视图(在我的例子中是一个按钮),请使用以下代码:

      if let button = sender.view as? UIButton {
          // Your code here
      }
      

      最后,不要忘记这个函数被多次调用(通常是在手势开始和结束时),所以你需要检查状态,你可以这样做:

      if (sender.state == UIGestureRecognizerState.ended) {
          // Your code here
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多