Sie übergeben den Parameter vom ersten View-Controller an den zweiten View-Controller, indem Sie eine seiner Eigenschaften festlegen.
Hier ist eine Schritt-für-Schritt-Anleitung:
1 - In Ihrem FirstViewController
, implementieren das UITabBarControllerDelegate
Protokoll
class FirstViewController: UIViewController, UITabBarControllerDelegate {
@IBOutlet weak var latitudeField: UITextField!
@IBOutlet weak var longtitudeField: UITextField!
var coordinates = [CLLocationCoordinate2D]()
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
}
@IBAction func addCoordinates(_ sender: Any) {
guard let lat = Double(latitudeField.text!), let long = Double(longtitudeField.text!) else {
return
}
self.coordinates.append(CLLocationCoordinate2D(latitude: lat, longitude: long))
}
// This method will be called whenever you are switching tab
// Note that the viewController can be the same view controller, i.e. FirstViewController
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
guard let secondViewController = viewController as? SecondViewController else {
return
}
secondViewController.coordinates = self.coordinates
}
}
2 - In Ihrem SecondViewController
Anzeige einen Stift für die Koordinate:
class SecondViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
var coordinates = [CLLocationCoordinate2D]() {
didSet {
// Update the pins
// Since it doesn't check for which coordinates are new, it you go back to
// the first view controller and add more coordinates, the old coordinates
// will get a duplicate set of pins
for (index, coordinate) in self.coordinates.enumerated() {
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
annotation.title = "Location \(index)"
mapView.addAnnotation(annotation)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let identifier = "pinAnnotation"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView?.canShowCallout = true
}
annotationView?.annotation = annotation
return annotationView
}
}
Ah ich sehe, so sind Sie in der Lage, "secondViewController.coordinate" über den Übergang zum secondViewController zu übergeben? Außerdem war ich in meiner Problemstellung nicht klar, aber ich möchte nicht, dass der Button zum secondViewController übergeht. Also das Klicken auf den Button "Add to Map!" bleibt in diesem FirstViewController. Wie kann ich Informationen weitergeben, ohne das Segment zu verwenden? – Kevin
Sie fügen die Koordinaten in einem Array in 'FirstViewController' hinzu. Wenn die Zeit gekommen ist, in der die Kartenansicht verschoben wird, legen Sie sie in der Methode 'prepare' fest. –
Ich habe Probleme, diesen Versuch zu arbeiten. Mein firstViewController und secondViewController befinden sich auf verschiedenen Registerkarten (Registerkarte Controller). Ich habe den Anmerkungsdelegierten auf den secondViewController-Code implementiert, und ich versuche, den Pin zu erhalten, der hinzugefügt wird, nachdem der Knopf geschlagen wird, sobald der Benutzer Registerkarten wechselt, jedoch habe ich kein Glück. – Kevin