2017-07-03 3 views
1

Ich habe eine mapView mit Anmerkungen mit Detailangaben, die bei einem Klick auf einen neuen viewController verschoben werden. Wenn der Benutzer dann auswählt, um aus der Detailerklärung zu der Kartenansicht zurückzukehren, möchte ich, dass die Kartenansicht die gleiche Ansicht hat, die der Benutzer hatte, bevor auf die Detailoffenbarung geklickt wurde. Unten ist der Code, den ich bisher eingerichtet habe, aber wenn der Benutzer von der Detailanzeige zurückklickt, wird die Karte verkleinert. Ich bin mir nicht sicher, wie ich die vorherige Ansicht wiederherstellen soll.Swift 3.0 Map kehrt zum vorherigen MapView zurück

Details Disclosure VC:

// here by segueing, I want to communicate to the MapView VC that the map should remain the same 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "backButtonTapped") 
    { 
     let destinationVC = segue.destination as! TabBarVC 
     mapStatus = "wentBack" 
     print("The value of mapStatus after seguing is \(mapStatus)") 
     destinationVC.selectedIndex = 1 

    } 

} 

MapView VC:

override func viewDidAppear(_ animated: Bool) { 
    // here if the mapStatus is not the correct value (the user never used the detail disclosure), the map will just snap onto the current location 

    if mapStatus == "wentBack" { 
     print("Do not update location") 

     // assuming appropriate code is placed here but I am not sure what it is 


    } else { 
     print("Updated Current Location") 
    let center = CLLocationCoordinate2D(latitude: self.lastLocation.coordinate.latitude, longitude: self.lastLocation.coordinate.longitude) 
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    map.setRegion(region, animated: true) 

     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     if #available(iOS 8.0, *) { 
      locationManager.requestAlwaysAuthorization() 
     } else { 
      // Fallback on earlier versions 
     } 
     let noLocation = CLLocationCoordinate2D() 
     let viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 200, 200) 
     map.setRegion(viewRegion, animated: false) 

    } 
    } 

Antwort

0

es so stellt sich heraus, dass die Karte nicht beibehalten, weil viewDidLoad aufgerufen wird, wenn der Benutzer auf der Detail Offenbarung schlägt zurück (Verwenden eines prepareForSegue). Ich benutzte

@IBAction func backButtonTapped(_ sender: UIBarButtonItem) { 
    self.dismiss(animated: true) 
    mapStatus = "wentBack" 

} 

Um nur die Viewcontroller zu entlassen, und nur viewDidAppear und nicht viewDidLoad aufrufen.

Verwandte Themen