从Swift中的UITableViewCell子类中获取IndexPath

我有一个自定义的UITableViewCell子类及其关联的xib。 我在这个单元格中有一个UILabel和一个UIButton ,我已经把button的内部动作连接到子类。

我需要的是当单元格中的button被点击时,获取具有该button的单元格的索引path。 也许可以通过代理或其他东西发回给视图控制器。

由于我在UITableViewCell子类中,所以我不能使用这样的解决scheme,因为我没有从单元格子类内引用tableview。 经过进一步的调查,我发现了另一个解决scheme,我在这样的Swift中实现。

 import UIKit class ContactCell: UITableViewCell { @IBOutlet weak var nameLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code selectionStyle = .None } @IBAction func callButtonPressed(sender: UIButton) { let indexPath = (self.superview as UITableView).indexPathForCell(self) println("indexPath?.row") } } 

但是,当我点击button,它崩溃了一个错误消息说Swiftdynamic投射失败

任何想法我的代码有什么问题?

或者我愿意接受任何其他的build议,以便让我以任何其他方式达到预期的结果。

谢谢。

听起来像你需要一个委托:

代表们在迅速?

然后,只需将单元格本身作为parameter passing给委托,然后可以轻松地执行tableView.indexPathForCell(cellFromDelegateMethod)

UIButton.Type实际上没有成员superview,但发件人有

var cell: UITableViewCell = sender.superview.superview as UITableViewCell

嘿,你也可以使用button的“标记”。在表格委托的cellForRowAt方法中,你可以用Indexpath.row标记button。 这里是我试图说的例子。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // get ur cell nib .As it has a button cell.startOrConntinuBtn.addTarget(self, action: #selector(sumbitOrContinue), for: .touchUpInside) cell.startOrConntinuBtn.tag = indexPath.row } 

并在触摸方法“sumbitOrContinue” –

  func sumbitOrContinue(sender: UIButton!) { let tag = sender.tag // do what you want to do like this example let detail = self.detailList[tag] let vc = self.storyboard?.instantiateViewController(withIdentifier: "mockExamInt") as! MockWindowVc vc.detailId = detail.id self.navigationController?.pushViewController(vc, animated: true)}