ios - 自定义单元格中的按钮索引

我创建一个包含按钮的自定义单元格,我需要从这个按钮创建segue到其他VC,但首先,我想用这个segue推一个对象。
我已经尝试使用cell.button.tag,但没有成功。

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

        if segue.identifier == "showMap" {
            let mapVC = segue.destination as! MapViewController
            //guard let indexPath = tableView.indexPathForSelectedRow else { return }
            mapVC.place = places[] // <- "here I need index of button in cell"
        }
    }

最佳答案

不要使用segue,而是通过navigation中的closure以编程方式处理UITableViewCell

class CustomCell: UITableViewCell {
    var buttonTapHandler: (()->())?

    @IBAction func onTapButton(_ sender: UIButton) {
        self.buttonTapHandler?()
    }
}

在上面的代码中,我创建了一个 buttonTapHandler-a closure,每当点击 button中的 cell时就会调用它。
现在,在 cellForRowAt方法中,当您 dequeue单元格时,设置 buttonTapHandlerCustomCell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
    cell.buttonTapHandler = {[weak self] in
        if let mapVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MapViewController") as? MapViewController {
            mapVC.place = places[indexPath.row]
            self?.navigationController?.pushViewController(mapVC, animated: true)
        }
    }
    return cell
}

在上面的代码中, buttonTapHandler在被调用时将 push一个新的 MapViewController实例以及基于 place的相关 indexPath