La transmission de valeurs entre ViewControllers basé sur la liste de sélection rapide
Je suis en train de passer l'index sélectionné nombre d'une liste de sélection d'un ViewController à l'autre, mais je suis en cours d'exécution dans un problème avec le tableView didSelectRowAtIndexPath délégué s'exécute un peu plus tard que la prepareForSegue fonction.
Pour l'essentiel, dans didSelectRowAtIndexPath, je seta variable, qui est ensuite repris dans le prepareForSegue. Le problème est que prepareForSegue semble courir le deuxième que la cellule est sélectionnée et avant la didSelectRowAtIndexPath fonction est appelée si ma variable n'est pas transmise.
Mon principal des morceaux de code sont:
tableView didSelectRowAtIndexPath délégué, qui définit des "selectedResult'...
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
selectedResult = indexPath.item
txtNameSearch.resignFirstResponder() //get rid of keyboard when table touched.
println("saved result")
//tableView.deselectRowAtIndexPath(indexPath, animated: false)
//var tappedItem: ToDoItem = self.toDoItems.objectAtIndex(indexPath.row) as ToDoItem
//tappedItem.completed = !tappedItem.completed
//tableView.reloadData()
}
prepareForSegue fonction qui envoie la variable 'toPass" à l'autre ViewController ('detailViewController'):
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!){
if (segue.identifier == "detailSeque") {
println("preparing")
var svc = segue!.destinationViewController as detailViewController
svc.toPass = selectedResult
//println(tableView.indexPathsForSelectedRows().
//svc.toPass = tableView.indexPathForSelectedRow()
}
}
Merci d'avance
- Je doute que NSIndexPath a une propriété de l'élément.
Vous devez vous connecter pour publier un commentaire.
Si vous avez une prise de courant pour votre tableView dans votre
ViewController
, vous pouvez les appelerindexPathForSelectedRow
dansprepareForSegue
.Si votre
ViewController
est une sous-classe deUITableViewController
, alors vous pouvez faire:Si votre
ViewController
n'est pas une sous-classe deUITableViewController
, mettre en place unIBOutlet
à laUITableView
dans votre vue-contrôleur:et de fil dans Interface Builder et l'appeler à partir d'
prepareForSegue
comme montrer ci-dessus.Plutôt que de déclencher votre enchaîner directement à partir d'un scénario d'action, pourquoi n'essayez-vous pas appel par programme
performSegueWithIdentifier
dans votredidSelectRowAtIndexPath
méthode, aprèsselectedResult
est réglé?