Search code examples
swiftuitextfieldmkmapviewpass-data

swift passing data in textfield to mapview


I'm making an app to search the location. It contains a VC(viewcontroller) to show the searching record.
Q1. How to get the input in textfield and show the location in the mapview?
Q2. I can't unwind the viewcontroller. I've done the code and wire in the storyboard. But still do nothing.
Q3. How to pass the data in the textfield in VC A to the tableview in VC B when a button is clicked?

Or am I do it wrong?
The code:

@IBAction func unwind(segue: UIStoryboardSegue) {
    viewController?.dismiss(animated: true)

    self.performSegue(withIdentifier: "unwindToMap", sender: self)

}  

override func viewDidLoad() {
    super.viewDidLoad()

    //Check for Location Services
    if (CLLocationManager.locationServicesEnabled()) {
        myLocationManager = CLLocationManager()
        myLocationManager.delegate = mapViewDelegate as? CLLocationManagerDelegate
        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.requestAlwaysAuthorization()
        myLocationManager.requestWhenInUseAuthorization()
    }
    mapViewDelegate = searchBox.text as? MKMapViewDelegate
}

@IBAction func searchButtonClick(_ sender: Any) {


    let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    let span = MKCoordinateSpanMake(0.005, 0.005)
    let region = MKCoordinateRegion(center: location, span: span)
    let annotation = MKPointAnnotation()


    annotation.coordinate = location
    annotation.title = searchBox.text!


    /*
    //find the words
    let _ : UITextPosition = searchBox.beginningOfDocument
    let _ : UITextPosition = searchBox.endOfDocument
    let _ : UITextRange = searchBox.selectedTextRange!

    // Get cursor position
    if let selectedRange = searchBox.selectedTextRange {
        _ = searchBox.offset(from: searchBox.beginningOfDocument, to: selectedRange.start)
    }
    searchBox.selectedTextRange = searchBox.textRange(
        from: searchBox.beginningOfDocument,                                         to: searchBox.endOfDocument)
    */

    // myMapView.add(location as! MKOverlay)
    myMapView.addAnnotation(annotation)
    myMapView.setRegion(region, animated: true)


}

If your answer is useful, I'll be very appreciated.

Edit:
(24 July 2019)Any more better answers? Although I've reproduce the problem.
It's welcomed that more answers for your reference.


Solution

  • For current location you can use the below code:

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let userLocation:CLLocation = locations[0] as CLLocation
    
        let center = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
    
        mapView.setRegion(region, animated: true)
    
        // Drop a pin at user's Current Location
        let myAnnotation: MKPointAnnotation = MKPointAnnotation()
        myAnnotation.coordinate = CLLocationCoordinate2DMake(userLocation.coordinate.latitude, userLocation.coordinate.longitude);
        myAnnotation.title = "Current location"
        mapView.addAnnotation(myAnnotation)
    }