Estoy tratando de ingresar el index
elemento seleccionado TableView
y comenzar alguna actividad después de eso. Desafortunadamente, la mayoría de las soluciones que encontré están en objetivo-c o no funcionan.
El método func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
no imprime la cell
etiqueta ...
¿Alguien puede ayudarme por favor?
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()
}
}
Después de algunos intentos, cambié el código a uno diferente del tutorial que encontré. Y tampoco funciona. Ahora estoy pensando que este es el problema con el simulador de iOS ...
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])!")
}
}
fuente
Esto funcionó bien para mí:
La salida debe ser:
section: 0 row: 0
fuente
Hereda el delegado de tableview y la fuente de datos. Implemente delegados lo que necesite.
override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self }
Y finalmente implementar este delegado
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("row selected : \(indexPath.row)") }
fuente
Para obtener un elemento de Array en la celda tableView, se toca o se hace clic en rápido
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell cell.textLabel?.text= arr_AsianCountries[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let indexpath = arr_AsianCountries[indexPath.row] print("indexpath:\(indexpath)") }
fuente
# Check delegate? first must be connected owner of view controller # Simple implementation of the didSelectRowAt function. func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { print("row selection: \(indexPath.row)") }
fuente
¡Me equivoco cada vez! Solo asegúrese de que el
tableView
delegado ydataSource
estén declarados enviewDidLoad
. Luego, normalmente lleno algunas matrices para simular los datos devueltos y luego los tomo desde allí.//******** Populate Table with data *********** public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? SetupCellView cell?.ControllerLbl.text = ViewContHeading[indexPath.row] cell?.DetailLbl.text = ViewContDetail[indexPath.row] cell?.StartupImageImg.image = UIImage(named: ViewContImages[indexPath.row]) return cell! }
fuente
Debe implementar la función didSelect.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("User touched on \(indexpath) row")
}
fuente