iosswiftuitableview

Pass multiple parameters to addTarget


In my UITableViewCell I have a button. And I want to add action to it by passing multiple parameters in cellForRowAtIndexPath method.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CartCell", forIndexPath:
        indexPath) as! CartTableViewCell
    cell.buyButton.addTarget(self, action: self.buyButton(indexPath, 2, 3 ,4 , 5, 6), forControlEvents: .TouchUpInside)
}

Solution

  • Maybe you can do something like this:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let cell = tableView.dequeueReusableCellWithIdentifier("CartCell", forIndexPath:indexPath) as! CartTableViewCell
        cell.buyButton.tag = (indexPath.section*100)+indexPath.row
        cell.buyButton.addTarget(self, action: "btnBuy_Click:", forControlEvents: .TouchUpInside)
    }
    
    func btnBuy_Click(sender: UIButton) {
            //Perform actions here
         let section = sender.tag / 100
         let row = sender.tag % 100
         let indexPath = NSIndexPath(forRow: row, inSection: section)
         self.buyButton(indexPath, 2, 3 ,4 , 5, 6)
    }
    

    Create the tag value according to your requirement and maintain its integrity too.