2016-12-13 5 views
0

Я использую собственный класс ячеек, чтобы заполнить таблицу в swift.Я пытаюсь заполнить пользовательскую ячейку кнопкой действия

Мне нужно заставить его работать с массивом кнопок, чтобы каждая ячейка имела кнопку, которая выполняет функцию IBAction, уникальную для этой ячейки.

Вот мой класс ячейки объявления переменной кнопки:

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

Все мои «задачи», что я хочу, чтобы это произошло при нажатии кнопки являются вариацией следующей схеме:

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

Вот моя попытка поместить их в массив в моем ViewController, что таблица находится в:

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

И, наконец, вот моя попытка его осуществление ее реализации в Tableview:

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 
    } 
+1

для этого не нужно, чтобы сделать его сложным, Jus присвоить тег в методе cellforrow как это: cell.performtask.tag = indexpath.row, а затем, когда вы вызовете свой метод, вы можете передать его аргумент (отправитель) как sender.tag == yourvalue, чтобы заставить его работать –

+0

Я все еще запутался, чтобы повлиять на это. Я до сих пор не могу связать performTask с задачами функции –

+0

ping me, теперь, где вы застряли, я вам помогу –

ответ

1

Вместо того чтобы держать массив функций. Почему бы вам не сделать что-то вроде этого:

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

В 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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^