使用MapKit时在创建时设置MKPointAnnotation的标题

时间:2019-06-17 21:01:32

标签: ios swift mapkit mkmapview mkpointannotation

因此,目前我似乎还无法弄清楚用户如何在“注释”图钉上输入标题。在我的代码中,长按地图会显示一个图钉,但是图钉的标题是“ Pin”。

我唯一想做的就是让应用程序的用户能够在创建时创建图钉的唯一标题。

导入基金会 导入UIKit 导入MapKit

MapsViewController类:UIViewController,CLLocationManagerDelegate {

let locationManager:CLLocationManager = CLLocationManager()

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()


    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    for currentLocation in locations{
        print("\(index) : \(currentLocation)")
    }
}

@IBAction func addPin(_ sender: UILongPressGestureRecognizer) {

    let alert = UIAlertController(title: "Title", message: "Please enter location name", preferredStyle: .alert)

    //2. Add the text field. You can configure it however you need.
    alert.addTextField { (textField) in
        textField.text = "Location name"
    }
    // 3. Grab the value from the text field, and print it when the user clicks OK.
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
        let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
        print("Text field: \(String(describing: textField?.text))")
        DispatchQueue.main.async { self.addPinWithTitle (sender , title : textField?.text ?? "") }
    }))
    self.present(alert, animated: true, completion: nil)}

func addPinWithTitle(_ sender: UILongPressGestureRecognizer , title : String) {
    let location = sender.location(in: self.mapView)
    let locCoordinates = self.mapView.convert(location, toCoordinateFrom: self.mapView)

    let annotation = MKPointAnnotation()

    annotation.coordinate = locCoordinates
    annotation.title = title

    self.mapView.addAnnotation(annotation)}

}

1 个答案:

答案 0 :(得分:0)

请遵循最终代码

@IBAction func addPin(_ sender: UILongPressGestureRecognizer) {

let alert = UIAlertController(title: "Title", message: "Please enter location name", preferredStyle: .alert)

//2. Add the text field. You can configure it however you need.
alert.addTextField { (textField) in
    textField.placeholder = "Location name"
}

// 3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
    let textField = alert?.textFields![0] // Force unwrapping because we know it exists.
    print("Text field: \(textField?.text)")
    DispatchQueue.main.async {
            self.addPinWithTitle (sender , title : textField?.text ?? "")
        }
}))
self.present(alert, animated: true, completion: nil)}

func addPinWithTitle(_ sender: UILongPressGestureRecognizer , title : String) {
let location = sender.location(in: self.mapView)
let locCoordinates = self.mapView.convert(location, toCoordinateFrom: self.mapView)

let annotation = MKPointAnnotation()

annotation.coordinate = locCoordinates
annotation.title = title

self.mapView.addAnnotation(annotation)}