/ / Estoy tratando de rellenar una celda personalizada con un botón de acción: rápido, uitableview, tableview, ibaction

Estoy intentando rellenar una celda personalizada con un botón de acción: swift, uitableview, tableview, ibaction

Estoy usando una clase de celda personalizada para completar una vista de tabla de forma rápida.

Necesito que funcione para una variedad de botones para que cada celda tenga un botón que realice una función IBAction única para esa celda.

Aquí está mi clase de celda que declara la variable del botón:

class taskCell: UITableViewCell {
@IBOutlet weak var performTask: UIButton!
//ignoring code irrelevant to question
}

Todas mis "tareas" que quiero que sucedan cuando se presiona el botón son una variación del siguiente patrón:

@IBAction func task1(sender: AnyObject){
if (prerequisite1 >= 1 ) {
prerequisite1 = prerequisite1 - 1;
points = points + 400;
prerequisite1Label.text = "(prerequisite1)";
pointsLabel.text = "(points)";
}
}

@IBAction func task2(sender: AnyObject){
if (prerequisite2 >= 1 ) {
prerequisite2 = prerequisite2 - 1;
points = points + 600;
prerequisite1Label.text = "(prerequisite2)";
pointsLabel.text = "(points)";
}
}

Aquí está mi intento de ponerlos en una matriz en mi viewController en el que se encuentra la tabla:

let firstTasks:[()->()] = [tasksViewController().task1(), tasksViewController().task2()]

Y finalmente aquí está mi intento de implementarlo, implementarlo en la vista de tabla:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:     NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("cell",   forIndexPath: indexPath) as! JobCell
cell.performTask.tag = indexPath.row
cell.performTask.addTarget(self, action: firstTasks[indexpath.row], forControlEvents: .TouchUpInside)

return cell
}

Respuestas

1 para la respuesta № 1

En lugar de mantener la matriz de funciones. ¿Por qué no haces algo como esto?

class JobCell: UITableViewCell {
@IBOutlet weak var performTask: UIButton!
var actionBlock: (sender: AnyObject?) -> Void?

func someFunc() {
performTask. addTargetself, action: #selector(JobCell.didTapButton(_:)), forControlEvents: .TouchUpInside)
}

func didTapButton(sender: AnyObject) {
actionBlock?(sender)
}
}

En viewController:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("cell",   forIndexPath: indexPath) as! JobCell
cell.actionBlock = {(sender) in
// do ur thing
}
return cell
}