मैं किसी अन्य पृष्ठ पर नेविगेट करने का प्रयास कर रहा हूं जो मानचित्र मार्करों के लिए मेरा विवरण पृष्ठ है जो मेरे मानचित्र नियंत्रक दृश्य में है। इसलिए उदाहरण के लिए यदि कोई उपयोगकर्ता किसी मार्कर पर क्लिक करता है तो वह उसे विशेष रूप से उस मार्कर विवरण पर ले जाएगा

मैंने एक सबक्लास बनाया और प्रत्येक मार्कर के अद्वितीय होने के लिए आवश्यक डेटा प्रारंभ किया।

लेकिन अब मुझे एक समस्या का सामना करना पड़ रहा है कि कैसे अगले पृष्ठ पर नेविगेट किया जाए क्योंकि यह एनोटेशन एक चर नहीं है।

यहाँ मेरा कोड है:

मेरा उपवर्ग:

class MyAnnotation: MKPointAnnotation{
    var shopPID: String!

    init(shopPID: String) {
         self.shopPID = shopPID
    }
    
}

मार्कर जोड़ना:

  db.collection("Shops").getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
            
                    let lat = document["latitude"] as? String
                    let long = document["longitude"] as? String
                    let myFloat = (lat! as NSString).doubleValue
                    let myFloat2 = (long! as NSString).doubleValue
                    let annotation = MyAnnotation(shopPID: document["shopPID"] as! String)
                    annotation.coordinate = CLLocationCoordinate2D(latitude: myFloat, longitude: myFloat2)
                    annotation.title = document["name"] as? String
                    annotation.subtitle = "Click to view shop details"
                    annotation.shopPID = document["shopPID"] as? String
                    self.mapView.addAnnotation(annotation)
                    
                }
            }
        }

क्लिक इवेंट और बहस करना:

   func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
       print(#function)
       
       if control == view.rightCalloutAccessoryView {
            performSegue(withIdentifier: "mapToDetails", sender: nil)
       }
   }

यहां वह जगह है जहां मुझे कोई समस्या है: मुझे एनोटेशन में संग्रहीत newProjectVC को एक मान देना होगा। मुझे यह कैसे करना है?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
 

   if (segue.identifier == "mapToDetails") {
    
        let navigationController = segue.destination as! UINavigationController
        let newProjectVC = navigationController.topViewController as! detailsSectionViewController
        newProjectVC.getKey = //variable with each shopPID for each pin should be here
    }
    }

कोई मदद? धन्यवाद

इस मंडली में मेरा पहचानकर्ता है "mapsToDetails"

3
user14237135 9 सितंबर 2020, 18:31

1 उत्तर

सबसे बढ़िया उत्तर

जब आपका एनोटेशन टैप किया जाता है तो आपको कस्टम क्रिया सेट करने के लिए इस MKMapViewDelegate विधि का उपयोग करना चाहिए।

पहला उपवर्ग एमकेएनोटेशन:

class MyAnnotation: NSObject, MKAnnotation {
    var shopPID: String
    var coordinate: CLLocationCoordinate2D
    let title: String?
    let subtitle: String?

    init(shopPID: String, coordinate: CLLocationCoordinate2D, title: String, subtitle: String) {
         self.shopPID = shopPID
         self.coordinate = coordinate
         self.title = title
         self.subtitle = subtitle
    }   
}

फिर, अपने MKMapViewDelegate उपयोग पर:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    
    guard let annotation = view.annotation as? MyAnnotation else { return }
    
    let uiStoryboard = UIStoryboard(name: "MyStoryboard", bundle: nil)
    guard let vc = myStoryboard.instantiateViewController(withIdentifier: "MyViewController") as? MyViewController else { return }
    vc.shopPID = annotation.shopPID
    present(vc, animated: true)
    
}

इस तरह आप टैप किए गए एनोटेशन की पहचान कर सकते हैं और इसके मूल्यों को अपने वांछित वीसी को पास कर सकते हैं।

0
Daniel E. Salinas 9 सितंबर 2020, 19:42