uitableviewcontroller uitableviewcell example ios swift uitableview

ios - uitableviewcell - Cómo seleccionar mediante programación una fila en UITableView en Swift 1.2(Xcode 6.4)



uitableviewcell swift (5)

Necesito seleccionar una fila en un programa UITableView utilizando XML Xcode 6.4 / Swift 1.2.

Este es el código simple:

var index = NSIndexPath(forRow: 0, inSection: 0) self.tableView.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle) self.tableView(self.tableView, didSelectRowAtIndexPath: index)

Lo anterior me da el siguiente error:

No se puede invocar ''selectRowAtIndexPath'' con una lista de argumentos de tipo ''(NSIndexPath !, animated: Bool, scrollPosition: UITableViewScrollPosition)''

¿Qué pasa con mi código? ¿Tal vez alguien más experimentó esto con Swift 1.2?

¡Cualquier ayuda es muy apreciada!

Aclamaciones

EDITAR: Mi UItableView se ha creado en IB en el UIViewController que estoy intentando llamar al código anterior. Cuando coloco el código en un UITableViewController, el compilador no da ningún error. ¿Necesito insertar un UITableViewController en un contenedor o hay otra forma?


Swift 3.x

si quieres hacerlo en la ''creación celular'', puedes hacerlo así

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = TableViewCell() let item = items[indexPath.row] cell.textLabel?.text = item.title if (item.checked) { tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) } return cell }


La declaración

self.tableView.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)

asume que tableView es una propiedad del controlador de vista, conectado a una vista de tabla en el guión gráfico. Un UITableViewController , por ejemplo, ya tiene esta propiedad.

En su caso, el controlador de vista no es un controlador de vista de tabla sino una subclase de un UIViewController . También tiene una toma de corriente que está conectada a la vista de tabla, pero no se llama tableView sino menuTable . Entonces, por supuesto, tienes que llamar

self.menuTable.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)

para seleccionar una fila de esa vista de tabla.

Los extraños mensajes de error son causados ​​por el hecho de que self.tableView también puede ser entendido por el compilador como una "función al curry" (compare http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/ ).


Usando Swift 2.x , como lo describe Pankaj purohit, responde que el método correcto es:

func tapRowAtIndex(index:Int) { let rowToSelect:NSIndexPath = NSIndexPath(forRow: index, inSection: 0) self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None) self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect) }

Tenga en cuenta que si llama a este método desde una clase externa, por ejemplo, no sabe cuándo TableView ha terminado su carga, entonces, ¿cuáles son las posibilidades ?, ¿cómo solucionar este problema? :

Paso uno : crea una clase boolean var

var automatingTap: Bool = false

Paso dos : verifique cuando la mesa termine de cargarse e inicie un método de "operaciones finales":

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { let lastRowIndex = tableView.numberOfRowsInSection(0) if indexPath.row == lastRowIndex - 1 { endOperations() } } func endOperations() { print("finished loading") if automatingTap { tapRowAtIndex(0) automatingTap = false } }

Paso tres : llamar a mi clase tableView de otra clase

por ejemplo:

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) { if segue!.identifier == "DetailsTableView" { let viewController:ViewController = segue!.destinationViewController as ViewController viewController.automatingTap = true } }


Use el código siguiente, luego de cargar su vista de tabla con datos:

let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0); //slecting 0th row with 0th section self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None);

ahora, tiene que llamar manualmente a didSelectRowAtIndexPath: delegar el método usando el siguiente código:

self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select

Gracias.


Solución Swift 3.x

Seleccionando una fila

let indexPath = IndexPath(row: 0, section: 0) myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom) myTableView.delegate?.tableView!(myTableView, didSelectRowAt: indexPath)

DeSelecting a Row

let deselectIndexPath = IndexPath(row: 7, section: 0) myTableView.deselectRow(at: deselectIndexPath, animated: true) myTableView.delegate?.tableView!(myTableView, didDeselectRowAt: indexPath)