ios - library - swift libraries
Emula programáticamente la selección en UITableViewController en Swift (2)
Perdón por la pregunta sin ninguna línea de código. Necesito consejos sobre cómo proceder, si es posible, lo que quiero.
En lenguaje Swift.
Supongamos que hay una aplicación con dos controladores: UITableViewController
con NavigationController
integrado, como principal. Cuando selecciona una fila en la tabla, abre UIViewController
, que muestra información detallada sobre el valor seleccionado.
¿Es posible hacer lo contrario? Cuando se inicia la aplicación, emula mediante programación la selección de la primera fila en la tabla e inmediatamente muestra UIViewController
con información detallada sobre el valor seleccionado. Y desde este controlador es posible volver a UITableViewController
través del NavigationController
.
Una vez más, me disculpo y gracias de antemano!
Sí, puede hacerlo rápidamente. Simplemente cargue su tableViewController
como de costumbre. Solo tiene que llamar
En Swift
let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0); //slecting 0th row with 0th section
self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None);
La función selectRowAtIndexPath
no desencadenará métodos de delegado como didSelectRowAtIndexPath:
por lo tanto, debe activar manualmente este método delegado.
self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select
O si está presionando ViewControllers
con segue, tiene que desencadenar performSegueWithIdentifier
self.performSegueWithIdentifier("yourSegueIdentifier", sender: self);
Ahora puede presionar viewController en didSelectRowAtIndexpath
. Para seleccionar la primera fila en la primera sección o ejecutar lo que haya escrito en didSelectRowAtIndexpath:
of tableView
En cuanto a su caso, simplemente presione el viewController
de viewController
en seleccionar en el 0 ° índice con didSelectRowAtIndexPath
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){
if indexPath.row == 0 {
self.navigationController.pushViewController(yourViewControllerToPush, animated: YES);
}
//handle other index or whatever according to your conditions
}
pushViewController
el controlador de vista presionado y si no desea animar el controlador de vista simplemente pase NO
al método pushViewController
.
Al presionar el botón Back
viewController
a tu vista viewController
En tu caso, solo tienes que escribir esto en tu viewDidAppear
if firstStart {
firstStart = false
let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition:UITableViewScrollPosition.None)
self.performSegueWithIdentifier("showForecastSelectedCity", sender: self)
}
También puede hacer esto simplemente accediendo al delegado tableView para forzar "didSelectRowAtIndex" para disparar
// programáticamente seleccione una fila para trabajar con
self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.Top)
// La selección por programación de la fila no desencadena la función "didSelectRowAtIndexPath", por lo que debemos forzar manualmente la activación según se detalla a continuación
self.tableView.delegate!.tableView!(tableView, didSelectRowAtIndexPath: indexPath!)