ios - stepper - Cómo detectar la celda tableView tocada o presionada rápidamente
switch ios (9)
Estoy tratando de obtener el
index
del elemento seleccionado en
TableView
y comenzar alguna actividad después de eso.
Desafortunadamente, la mayoría de las soluciones que encontré están en Objective-C o no funcionan.
El método
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
no imprime la etiqueta de la
cell
.
Alguien me puede ayudar 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])!") } }
El problema fue resuelto por mí mismo usando el tutorial de weheartswift
Esto funcionó bien para mí:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("section: /(indexPath.section)")
print("row: /(indexPath.row)")
}
La salida debe ser:
section: 0
row: 0
Herede el delegado de vista de tabla y la fuente de datos. Implemente delegados lo que necesita.
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)")
}
Me cago en el cada vez!
Solo asegúrese de que el delegado
dataSource
y
dataSource
estén declarados en
viewDidLoad
.
Luego, normalmente relleno algunas matrices para simular los datos devueltos y luego lo 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!
}
Si desea el valor de la celda, entonces no tiene que volver a crear la celda en
didSelectRowAtIndexPath
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println(tasks[indexPath.row])
}
La tarea sería la siguiente:
let tasks=["Short walk",
"Audiometry",
"Finger tapping",
"Reaction time",
"Spatial span memory"
]
también debe verificar
cellForRowAtIndexPath
, debe establecer el identificador.
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
}
Espero eso ayude.
Un par de cosas que deben suceder ...
-
El controlador de vista necesita extender el tipo
UITableViewDelegate
-
El controlador de vista debe incluir la función
didSelectRowAt
. -
La vista de tabla debe tener el controlador de vista asignado como su delegado.
A continuación se muestra un lugar donde podría asignarse el delegado (dentro del controlador de vista).
override func loadView() {
tableView.dataSource = self
tableView.delegate = self
view = tableView
}
Y una implementación simple de la función
didSelectRowAt
.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("row: /(indexPath.row)")
}
En Swift 3.0
Puede encontrar el evento para el toque / clic de la celda de la vista de tabla a través del método de delegado. Además, puede encontrar la sección y el valor de fila de la celda de esta manera.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("section: /(indexPath.section)")
print("row: /(indexPath.row)")
}
Para obtener un elemento de Array en la celda tableView tocado o hecho clic rápidamente
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)")
}
# 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)")
}