pawisoon pawisoon - 6 months ago 27
Swift Question

How to detect tableView cell touched or clicked in swift

I'm trying to get

index
of selected item in
TableView
and start some activity after that. Unfortunately most of solutions that I found are in objective-c or do not work.

Method
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
don't print the
cell
label..

Can somebody help me please?


import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDataSource {

let tasks=[("Short walk"),
("Audiometry"),
("Finger tapping"),
("Reaction time"),
("Spatial span memory")
]


//how many sections are in your table
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

//return int how many rows
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}

//what are the contents

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

var (testName) = tasks[indexPath.row]
cell.textLabel?.text=testName
return cell
}

// give each table section a name

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

return "Tasks"

}

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

let indexPath = tableView.indexPathForSelectedRow();

let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!

println(currentCell.textLabel!.text)
}


override func viewDidLoad() {
super.viewDidLoad()

}
}


After a few tries I changed the code to a different one from tutorial that I found. And it doesn't work too. Now I'm thinking this is the issue with iOS simulator...


import UIKit
import ResearchKit

class TaskListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet
var tableView: UITableView?
var items: [String] = ["We", "Heart", "Swift"]

override func viewDidLoad() {
super.viewDidLoad()

self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell = self.tableView!.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell

cell.textLabel?.text = self.items[indexPath.row]

return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("You selected cell #\(items[indexPath.row])!")
}

}


Answer

If you want the value from cell then you don't have to recreate cell in the didSelectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    println(tasks[indexPath.row])
}

Task would be as follows :

let tasks=["Short walk",
    "Audiometry",
    "Finger tapping",
    "Reaction time",
    "Spatial span memory"
]

also you have to check the cellForRowAtIndexPath you have to set identifier.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell
    var (testName) = tasks[indexPath.row]
    cell.textLabel?.text=testName
    return cell
}

Hope it helps.

Comments