MKMap 我无法在我的地图视图中打开 URL swift 4

MKMap I can't open a URL in my mapview swift 4

大家好,我正在使用 MKMap 并将一些图钉填充到地图中是当我点击 URL 打开网络浏览器并重定向到 URL 时,由于某种原因无法正常工作。

这是我用来打开 url 的方法的屏幕截图:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if control == view.rightCalloutAccessoryView {
        if let toOpen = view.annotation?.subtitle! {
            if let url = URL(string: toOpen) {
                if #available(iOS 10, *) {
                    UIApplication.shared.open(url, options: [:],
                                              completionHandler: {
                                                (success) in
                                                print("Open \(url): \(success)")
                    })
                } else {
                    _ = UIApplication.shared.openURL(url)
                }
            }
        }
    }
}

这是我定义引脚属性的方法,奇怪的是我将引脚颜色设置为蓝色,但仍显示为红色。

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

    let reuseId = "pin"

    var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView

    if pinView == nil {
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.canShowCallout = true
        pinView!.pinTintColor = UIColor.blue
        pinView!.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
    } else {
        pinView!.annotation = annotation
    }

    return pinView

}

这是我的 Github 项目。我想知道我做错了什么,因为我可以点击我的 pin 显示信息,但它不会打开 URL。

感谢您的宝贵时间!

可能你的viewForAnnotation方法没有被调用。替换

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

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

我解决了。

我意识到我的 mapView 函数根本不起作用。我评论了代码并移动了东西,而这两个函数什么也没做。

所以在观看视频和阅读一段时间后,我发现我需要它来使用 mapView 委托给控制器本身,这样我就可以使用我的 mapView 函数并添加这行代码:

override func viewDidLoad() {
    super.viewDidLoad()
    //MIRACLE HAPPENS HERE
    mapView.delegate = self
}

只需在我的 viewDidLoad 函数中使用那行代码,我在 mapView 函数中的所有代码就开始工作了。