MKMapview 委托即使设置了委托也从未调用过



我有一个集成了滚动视图的UIView。 在滚动视图中,我有一张地图,用户需要在其中移动图钉。 我稍后将重用引脚的位置。

我正在为地图设置强引用和设置委托(设计和代码(。 我能够看到创建的引脚,但要具有自定义图标并可以将其设置为可拖动,我已经实现了 mapView( 视图用于 MKAnnotation

这似乎从未被调用过,我不明白为什么。

我还尝试让另一个代表作为 didfinishload,以了解问题是否与 mkannotation 有关,但这个也从未被调用过。

import Foundation
import Firebase
import MapKit
import UIKit

public class Setup: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate{

    var ChargePointID = ""
    @IBOutlet weak var chargepointIDLabel: UILabel!

    let locationManager = CLLocationManager()
    var pin: customPin!
    //setting up variables
    //pricing textfield and slider
    @IBOutlet weak var priceLabel: UITextField!
    @IBOutlet weak var priceSlider: UISlider!

    @IBOutlet var map: MKMapView!
    override public func viewDidLoad() {
        super.viewDidLoad()
         chargepointIDLabel.text = ChargePointID
        self.map.delegate = self
        self.map.mapType = .hybrid
        // Ask for Authorisation from the User.
        self.locationManager.requestAlwaysAuthorization()
        // For use in foreground
        self.locationManager.requestWhenInUseAuthorization()
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
            locationManager.startUpdatingLocation()
        }
        //create liocation relative to user
        let location = CLLocationCoordinate2D(latitude: (locationManager.location?.coordinate.latitude)!, longitude: (locationManager.location?.coordinate.longitude)!)
        //centering map to user location
        let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005))
        self.map.setRegion(region, animated: true)
        //creating a pin of type custompin
        pin = customPin(pinTitle: ChargePointID, pinSubTitle: "", location: location)
        map.addAnnotation(pin)

    }
    private func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
        print("locations = (locValue.latitude) (locValue.longitude)")
    }

    private func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        print("annotation title == (String(describing: view.annotation?.title!))")
    }

    private func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        print("ok")
        let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "customannotation")
        annotationView.image = UIImage(named:"setuppin")
        annotationView.canShowCallout = true
        return annotationView
    }
    func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
print(" map has finished")
    }

    private func map(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        print("ok")
        let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "customannotation")
        annotationView.image = UIImage(named:"setuppin")
        annotationView.canShowCallout = true
        return annotationView
    }



}
class customPin: NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String?
    var subtitle: String?
    init(pinTitle:String, pinSubTitle:String, location:CLLocationCoordinate2D) {
        self.title = pinTitle
        self.subtitle = pinSubTitle
        self.coordinate = location
    }
}

private 不是必需的。取代

private func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

这是Xcode引发此警告的原因

实例方法 'mapView(:viewFor:('几乎匹配可选要求"mapView(:viewFor:("协议 'MKMapViewDelegate'

并建议将其设为私有作为修复。 顺便说一句,即使没有私人也不会筹集任何东西

该死的!!!!

我解决了.... 警告是因为我的类被宣布为公开,代表也需要。

我从课堂上删除了公开声明,一切开始工作.

所以问题最终被主类宣布为公共!