当点击单元格内的图像时如何获取indexPath

Kod*_*ata 1 uitableview nsindexpath swift

我想实现如果在 tableviewCell 中点击 profileImage 的功能,则转至 detailView。我添加了 tapGesture 但我仍然无法弄清楚如何让 indexPath 传递数据。我试过这样,但应用程序会崩溃。

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "detailSegue" {
            let next: DetailViewController = segue.destination as! DetailViewController
          // pattern1
 let indexPath = tableView.indexPath(for: sender as! CustomTableViewCell)
         // pattern2
        let indexPath = tableView.indexPathForSelectedRow! as NSIndexPath

            next.data = datas[indexPath.row]
        }
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?先感谢您!

Raj*_*r R 5

如果添加UITapGestureRecognizer到 anUIImageView然后不要忘记将isUserInteractionEnabled属性设置为true

创建一个变量来存储选定的 indexPath.row

var selectedCell:Int!
Run Code Online (Sandbox Code Playgroud)

cellForRow方法中向图像视图添加手势。

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBtnAction(_:)))
cell.imageView.tag = indexPath.row
cell.imageView.addGestureRecognizer(tapGesture)
Run Code Online (Sandbox Code Playgroud)

在目标方法中执行 segue

func tapBtnAction(_ sender: UITapGestureRecognizer) {
    print("\(sender.view.tag) Tapped")
    self.selectedCell = sender.view.tag
    self.performSegueWithIdentifier("detailSegue", sender: self)
}
Run Code Online (Sandbox Code Playgroud)

prepareforsegue方法中从数组中获取数据。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

   if segue.identifier == "detailSegue" {
      let next: DetailViewController = segue.destination as! DetailViewController
       next.data = datas[self.selectedCell]
   }
}
Run Code Online (Sandbox Code Playgroud)