使用cellForItemsInSection中#selector的两个参数调用函数

时间:2016-09-22 10:02:33

标签: swift function uicollectionviewcell

这是我的功能:

func myFunction(sender:UILongPressGestureRecognizer, index: Int){
print(sender.view?.tag)
}

在cellForItemsInSection中,这就是我所做的:

let gesture  UILongPressGestureRecognizer()
gesture.addTarget(self, action: #selector(self.myFunction(_:))) //here I want to call the second parameter with the indexPath.row but how? 
gesture.view?.tag = indexPath.row

3 个答案:

答案 0 :(得分:1)

您无法在UIGestureRecognizer操作中传递两个参数。

来自documentation

  

调用的操作方法必须符合以下之一   签名:

     

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

答案 1 :(得分:0)

像这样:

let gesture = UILongPressGestureRecognizer() 
gesture.addTarget(self, action: #selector(myFunction(sender:index:)))

如果您在selector前加上该类,则可以获得代码完成。

因此,如果您MyViewController myFunction,则可以写

gesture.addTarget(self, action: #selector(MyViewController.))

并且代码完成应该可以帮助您,因为您可以在此图像中看到(是的,我在一个名为CreateUserViewController的类中,但只是忽略它:)

code completion in action

希望对你有所帮助。

修改

@vadian是对的。我会留下这个答案,所以你可以看到如何使用代码完成,但我的答案是不正确的,vadians是。

答案 2 :(得分:0)

@vadian表示,你不能在UIGestureRecognizer动作中传递两个参数。

您只需执行此操作即可在函数中获取indexPath.row

let gesture = UILongPressGestureRecognizer()
gesture.view?.tag = indexPath.row
gesture.addTarget(self, action: #selector(self.myFunction(_:)))

并在myFunction

func myFunction(sender:UILongPressGestureRecognizer){
  let tag = sender.view?.tag


  //do stuff

  }