Ios 单击ImageView并在Swift/Xcode中执行不带选择器的函数

Ios 单击ImageView并在Swift/Xcode中执行不带选择器的函数,ios,swift,uibutton,uiimageview,selector,Ios,Swift,Uibutton,Uiimageview,Selector,我有一个带单元格的桌面视图。每个单元格都有一个imageView。当我点击imageView时,我想用传入的参数执行一个函数。 我知道如何使用单击ImageView的唯一方法如下: let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber)) cell.imageView.addGestureRecognizer(gestureRecognizer) @objc func

我有一个带单元格的桌面视图。每个单元格都有一个imageView。当我点击imageView时,我想用传入的参数执行一个函数。 我知道如何使用单击ImageView的唯一方法如下:

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
cell.imageView.addGestureRecognizer(gestureRecognizer)

@objc func printNumber(){
        print("4")
}

现在,想象同样的事情,但是我想把要打印的数字传递到函数中 我看到过无数不同的帖子,都是关于如何将参数传递给选择器的,所以我不知道在这种情况下该怎么办

我想做这样的事情(我知道你做不到)


我需要这样做,因为每个按钮在按下时都会有不同的输出,这取决于单元格中的其他变量。

您不需要输入数字。假设识别器位于图像视图上,则您可以:

  • 获取手势视图(这是图像视图)
  • 沿着响应程序链查找父表视图单元格和表视图
  • 向tableview询问tableview单元格的索引路径(这基本上是您想要传递的编号)
  • 用这个号码调用你的函数
  • 一般来说,在响应者链上行走:

    extension UIResponder {
        func firstParent<Responder: UIResponder>(ofType type: Responder.Type ) -> Responder? {
            next as? Responder ?? next.flatMap { $0.firstParent(ofType: type) }
        }
    }
    

    仅当仍要使用
    #选择器
    时,才使用accessibilityIdentifier属性,以便UIgestureRecognitizer可以读取值对象的值

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! YourTableViewCell
        …
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
        cell.imageView.accessibilityValue = String(4)
        cell. imageView.isUserInteractionEnabled = true
        cell.imageView.addGestureRecognizer(gestureRecognizer)
        …
        return cell
     }
    
     @objc func printNumber(sender: UITapGestureRecognizer) {
            if let id = sender.view?.accessibilityIdentifier {
                print(tag)
            }
     }
    

    嗯,谢谢,我想我明白你的意思了,你能写一个像我举的例子一样的例子,打印出按下按钮的单元格的索引路径号吗?你在找这个吗?哦,该死的,事实上可能就是这样,我回家后会检查的,谢谢你,伙计!
      guard let cell = recognizer.view?.firstParent(ofType: UITableViewCell.self),
         let tableView = recognizer.view?.firstParent(ofType: UITableView.self),
         let indexPath = tableview.indexPath(for: cell) else {
        return
      }
      // Do stuff with indexPath here
    
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! YourTableViewCell
        …
        let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(printNumber))
        cell.imageView.accessibilityValue = String(4)
        cell. imageView.isUserInteractionEnabled = true
        cell.imageView.addGestureRecognizer(gestureRecognizer)
        …
        return cell
     }
    
     @objc func printNumber(sender: UITapGestureRecognizer) {
            if let id = sender.view?.accessibilityIdentifier {
                print(tag)
            }
     }