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:
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