2017-05-31 4 views
0

Je souhaite enregistrer les coordonnées de latitude et de longitude dans deux étiquettes sur un deuxième contrôleur de vue, mais j'ai du mal à le faire fonctionner.Transmettre les coordonnées de latitude et de longitude dans un second contrôleur de vue

Voici mon code:

First View Controller:

import UIKit 
import CoreLocation 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { 

    @IBOutlet var map: MKMapView! 

    var locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

     let userLocation: CLLocation = locations[0] 

     let latitude = userLocation.coordinate.latitude 

     let longitude = userLocation.coordinate.longitude 

     let latDelta: CLLocationDegrees = 0.05 

     let lonDelta: CLLocationDegrees = 0.05 

     let span = MKCoordinateSpan(latitudeDelta: latDelta, longitudeDelta: lonDelta) 

     let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 

     let region = MKCoordinateRegion(center: location, span: span) 

     self.map.setRegion(region, animated: true) 

    }  

} 

Second View Controller:

import UIKit 

class AddSightingViewController: UIViewController { 

    var getCoordinates: ViewController! 

    @IBOutlet weak var latitudeLabel: UILabel! 
    @IBOutlet weak var longitudeLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     latitudeLabel.text = "\(getCoordinates.locationManager.location?.coordinate.latitude)" 
     longitudeLabel.text = "\(getCoordinates.locationManager.location?.coordinate.longitude)" 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

Pouvez-vous donner plus de détails sur le fait d'avoir du mal à le faire fonctionner? Qu'est-ce qui ne fonctionne pas? Qu'avez-vous essayé? Y at-il du code quelque part qui définit la valeur de la propriété 'AddSightingViewController.getCoordinates'? –

+0

Désolé @KristopherJohnson mon code produira des coordonnées de 0.0 pour lat et long ou une erreur nulle avec le code ci-dessus – Elfuthark

+1

créer une classe singleton pour obtenir l'emplacement et obtenir les valeurs à partir de là à n'importe quel contrôleur de vue –

Répondre

0

lorsque vous appuyez sur VC

objAddSightVC.location = CLLocationCoordinate2D(latitude: your_lat, longitude: your_long) 

dans AddSightingViewController

var location : CLLocationCoordinate2D! 

et

latitudeLabel.text = String(describing: location.latitude) 
longitudeLabel.text = String(describing: location.longitude) 
0

sur storyboard ou pousser VC Initié

let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long) 
let addSightingViewController = AddSightingViewController(location :coordinate) 

à AddSightingViewController déclarer propriété emplacement avec le constructeur init

class AddSightingViewController: UIViewController { 

    let location:LLocationCoordinate2D 

    init(location:LLocationCoordinate2D!){ 

    self.location = location 
} 

override func viewDidLoad() { 
     super.viewDidLoad() 

     latitudeLabel.text = "\(location?.coordinate.latitude)" 
     longitudeLabel.text = "\(location?.coordinate.longitude)" 

} 

}