switch stepper ios swift uitableview

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 ...

  1. El controlador de vista necesita extender el tipo UITableViewDelegate

  2. El controlador de vista debe incluir la función didSelectRowAt .

  3. 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)") }