Как вызвать функцию, когда MKPointAnnotation нажата в swift 3 - PullRequest
0 голосов
/ 24 июня 2018

Я пробовал все, чтобы получить аннотацию для вызова функции в swift.Я не знаю, делаю ли я что-то не так, но это просто не сработает.Я пытался протестировать свой проект на реальном iphone, но ничего не произошло.

Вот мой код:

import UIKit
import MapKit
import Foundation
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

//Map

@IBOutlet weak var map: MKMapView!

let manager = CLLocationManager()

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
    let location = locations[0]

    let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
    let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
    let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
    map.setRegion(region, animated: true)

    let request = MKLocalSearchRequest()
    request.naturalLanguageQuery = "coffee"

    // Set the region to an associated map view's region
    request.region = map.region

    let search = MKLocalSearch(request: request)
    search.start { response, error in
        guard let response = response else {
            print("There was an error searching for: \(String(describing: request.naturalLanguageQuery)) error: \(String(describing: error))")
            return
        }

        for item in response.mapItems
        {
            print("URL=\(String(describing: item.url ?? nil))")
            print("Name=\(String(describing: item.name ?? nil))")
            print("Phone Number\(String(describing: item.phoneNumber ?? nil))")


            let annotation = MKPointAnnotation()
            annotation.coordinate = item.placemark.coordinate
            annotation.title = item.name
            self.map.addAnnotation(annotation)
        }
    }
    self.map.showsUserLocation = true
}


override func viewDidLoad() {
    super.viewDidLoad()

    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.requestWhenInUseAuthorization()
    manager.startUpdatingLocation()
}

func callThisFunction() {
    print("The function has been called.")
}

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
    callThisFunction()
}

Я посмотрел много статей о том, как это сделать,но я не могу справиться с этим.Любые заголовки в моем коде будут великолепны, спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

Добавьте

map.delegate = self

к вашему viewDidLoad ()

О, и Xcode сообщает мне, что

Метод экземпляра 'mapView (mapView: didSelectAnnotationView:) 'почти соответствует необязательному требованию' mapView (_: didSelect :) 'протокола' MKMapViewDelegate '

Это также необходимо исправить, используя кнопку «Исправить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...