ios uitableview swift uibutton nsindexpath

ios - Obtenga el IndexPath dentro de una subclase UITableViewCell en Swift



uibutton nsindexpath (3)

Tengo una subclase personalizada de UITableViewCell y su xib asociado. Tengo un UILabel y un UIButton en esta celda y he conectado el retoque dentro de la acción del botón a la subclase.

Lo que necesito es cuando se toca ese botón en la celda, para obtener la ruta de acceso al índice de la celda que tiene ese botón. Y tal vez enviarlo de vuelta al controlador de la vista a través de un delegado o algo así.

Como estoy dentro de una subclase de UITableViewCell , no puedo usar una solución como this porque no tengo una referencia a la vista de tabla desde dentro de la subclase de celda. Tras una investigación adicional, encontré another solución y la implementé en Swift de esta manera.

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") } }

Pero cuando toco el botón, se bloquea con un mensaje de error que dice que Swift Dynamic Cast falló .

¿Alguna idea de lo que está mal con mi código?

O estoy abierto a cualquier otra sugerencia que me permita lograr el resultado deseado de cualquier otra manera.

Gracias.


Oye, también puede usar "Etiqueta" del botón. Dentro del método cellForRowAt del delegado de tabla u puede etiquetar el botón con Indexpath.row. Aquí está el ejemplo que trato de decir.

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 }

y en el método táctil "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)}


Parece que necesitas un delegado:

¿Delegados en veloz?

Luego simplemente pase la celda como parámetro al delegado, y luego puede hacer fácilmente tableView.indexPathForCell(cellFromDelegateMethod)


UIButton.Type realmente no tiene supervisión de miembros, pero el remitente tiene

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