2016-07-23 2 views
1

Voici le code que j'ai actuellement:nulle variable en essayant de passer des variables voir avec contrôleur Segue

var valueToPass: String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var viewController = segue.destinationViewController as AnotherViewController 
    viewController.passedValue = valueToPass // valueToPass equals nil here? Why? 
} 

comme vous pouvez le voir, je l'ai assigné "test" à valueToPass en didSelectRowAtIndexPath mais prepareForSegue, valueToPass est nul? Pourquoi?

+0

Votre tablevue est-elle présentée dans un storyboard avec le segue? si c'est le cas, je ne suis pas certain que 'tableView: didSelectRowAtIndexPath:' est effectivement appelé avant 'prepareForSegue: sender:'. Vous pouvez tester cela en supprimant les points d'arrêt dans les deux méthodes et en voyant ceux qui se déclenchent en premier lorsque vous tapez sur la cellule. Essayez de garder 'prepareForSegue: expéditeur:' libre de dépendances implicites sur les autres méthodes – markedwardmurray

Répondre

1

Essayez de remplacer:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    let indexPath = tableView.indexPathForSelectedRow(); 
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

Avec ceci:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    let currentCell = tableView.cellForRowAtIndexPath(indexPath.row) as! UITableViewCell; 

    valueToPass = currentCell.textLabel.text! // valueToPass now equals "test" 
    performSegueWithIdentifier("yourSegueIdentifer", sender: self) 

} 

Aussi, lorsque vous avez fait le Segue dans le story-board, assurez-vous de ne pas faire glisser de la tableview à l'autre viewcontroller. C'est parce que si vous le faites automatiquement, alors segue sera appelé BEFORE didSelectRow ... le faisant effectuer la segue avant de définir la valeur. Faites simplement glisser le viewcontroller qui héberge la vue tabulaire vers la nouvelle vue.

+0

"De même, lorsque vous avez créé la séquence dans le storyboard, assurez-vous de NE PAS glisser de la vue de table vers le viewcontroller suivant, car si vous le faites automatiquement, puis exécuter segue sera appelé BEFORE didSelectRow ... en le faisant effectuer la segue avant de définir la valeur.Tirez simplement à partir du viewcontroller qui héberge la vue de la table à la nouvelle vue. " Ce fut le problème. Merci beaucoup! – johnniexo88

+0

Pas de problème :)! – Tob