2017-10-11 11 views
0

J'ai un problème très intéressant lorsque je sélectionne un UITableViewCell. En ce moment j'essaye de passer un tableau de mon ViewController principal dans un ViewController secondaire. La première fois que je lance mon application et sélectionne une cellule dans mon UITableView tout se charge parfaitement, cependant la deuxième fois que je sélectionne une cellule différente, l'information de l'ancienne cellule semble persister jusqu'à ce que je revienne une fois de plus et choisisse la cellule une seconde temps.Les données persistent sur une ancienne vue lorsque de nouvelles informations doivent y figurer - Swift

Voici les fonctions qui gèrent la pâque de l'information dans mon premier ViewController

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    self.selectedRow = indexPath.row 
    print("The current row is: ", self.selectedRow) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    let nextViewController = segue.destination as! SelectedEventViewController 

    nextViewController.recievedArray = [self.eventArrayData[self.selectedRow]] 
} 

et c'est le contrôleur de vue qui est de recevoir les informations

class SelectedEventViewController: UIViewController 
{ 
    @IBOutlet weak var mapView: GMSMapView! 
    @IBOutlet weak var recHost: UILabel! 
    @IBOutlet weak var recStatus: UILabel! 
    @IBOutlet weak var recPrice: UILabel! 
    @IBOutlet weak var recAddress: UILabel! 
    @IBOutlet weak var recTown: UILabel! 

    var recievedArray: Array = [eventStruct]() 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     self.loadData() 
    } 

    func loadData() 
    { 
     let camera = GMSCameraPosition.camera(withLatitude: self.recievedArray[0].eventLat, longitude: self.recievedArray[0].eventLong, zoom: 15) 
     self.mapView.camera = camera 

     let marker = GMSMarker() 
     marker.position = CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0) 
     marker.title = self.recievedArray[0].eventHost 
     marker.map = self.mapView 

     recHost.text = self.recievedArray[0].eventHost 

     self.title = self.recievedArray[0].eventHost 
    } 

} 

Toute aide serait grandement appréciée!

Répondre

0

Vous déclenchement de l'enchaînement directement à partir de la sortie action pour la ligne dans la table de montage de sorte que l'enchaînement est lancé avant que la fonction est appelée didSelectRowAt avec le résultat que self.selectedRow contient l'ancienne ligne lorsque prepare(for:) est appelée.

Vous pouvez utiliser la indexPathForSelectedRow propriété dans votre prepare(for:) et vous n'avez pas besoin de mettre en œuvre didSelectRowAt:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
    let nextViewController = segue.destination as! SelectedEventViewController 
    if let indexPath = tableView.indexPathForSelectedRow { 
     let selectedRow = indexPath.row 
     nextViewController.recievedArray = [self.eventArrayData[selectedRow]] 
    } 
} 
+0

Juste essayé le code proposé et je semble être la réception d'une « référence à un membre Ambigu « tableView (_: numberOfRowsInSection :) '" – hpcsolo

+0

Vous avez probablement une erreur dans votre équilibrage de {} – Paulw11

+0

Juste vérifié, mais rien ne semble être éteint avec l'équilibrage de {} – hpcsolo