user1406716
user1406716

Reputation: 9705

how to handle button click for each button in each row of UITableView

I have a UITableView (with a Custom class called CellModelAllNames for each row). Each Row has a Label and a button.

My question is: When btn_addRecording (i.e. the '+' button is clicked on any/each of the rows, how do I get the lbl_name.text, the label name shown, and show a pop up in the ViewController itself. I want to get additional information in the pop up and then save all the info (including the lbl_name to a database).

enter image description here

CellModelAllNames for each row layout:

import UIKit


class CellModelAllNames: UITableViewCell {

@IBOutlet weak var lbl_name: UILabel!

@IBOutlet weak var btn_addRecording: UIButton!


@IBAction func btnAction_addRecording(sender: AnyObject) {

    println("clicked on button in UITableViewCell")

}
override func awakeFromNib() {
    super.awakeFromNib()
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}

func setCell(setBabyName: String) {
    self.lbl_name.text = setBabyName
}
}

Here's the code of my ViewController:

import UIKit

class SecondViewController: UIViewController, UITableViewDelegate,   UITableViewDataSource {


@IBOutlet weak var tbl_allNames: UITableView!

var arrayOfNames: [Name] = [Name]()

override func viewDidLoad() {
    super.viewDidLoad()
    self.tbl_allNames.delegate = self
    self.tbl_allNames.dataSource = self
    self.tbl_allNames.scrollEnabled = true

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:CellModelAllNames = self.tbl_allNames.dequeueReusableCellWithIdentifier("CellModelAllNames") as! CellModelAllNames
    let name = arrayOfNames[indexPath.row]
      cell.setCell(name.name)
     println("in tableView, cellforRowatIndex, returning new cells")
     return cell
 }
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayOfNames.count
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

}


}

Upvotes: 1

Views: 824

Answers (2)

Rahul Mane
Rahul Mane

Reputation: 1005

You can add button action in your ViewController

1) In your function cellForRowAtIndexPath assign button's tag as index (ie. indexPath.row)

cell.btn_addRecording.tag = indexPath.row

2) Add target and action for your button :

cell.btn_addRecording.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)

3) Add action in ViewControler (ie. save info in database)

func buttonPressed(button: UIButton!)
{
     // Add your code here
     let name = arrayOfNames[button.tag]
}

Upvotes: 1

Mundi
Mundi

Reputation: 80271

You can use standard UIKit methods to get the cell and its data:

func tappedButton(sender : UIButton) {
   let point = sender.convertPoint(CGPointZero, toView: self.tableView)
   let indexPath = self.tableView.indexPathForRowAtPoint(point)!
   let name = arrayOfNames[indexPath.row]
   // do something with name
}

Upvotes: 1

Related Questions