首页 > 解决方案 > CalloutAccessoryTapped - 为什么无法打开网址?我确定一些简单的事情

问题描述

所以我在玩MKAnnotationView,我有权利calloutaccessory

由于我只有一个注释,我想我会尝试通过打开一个网页来尽可能简单地 - 谷歌。但是,事实并非如此,我不明白为什么。我错过了什么?

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

    if control == view.rightCalloutAccessoryView {
        let url = NSURL(string: "google.com")
        UIApplication.shared.canOpenURL(url as! URL)
    }
}

标签: swiftbuttonannotationsinputaccessoryview

解决方案


它不是canOpenURL用于检查应用程序是否能够打开 url

返回一个布尔值,指示 URL 的方案是否可以由设备上安装的某些应用程序处理。

iOS 10 *它是UIApplication.shared.open(url, options: [:], completionHandler: nil),否则你可以使用

UIApplication.shared.openURL(url)

根据文档

重要的

如果您的应用在 iOS 9.0 或之后链接,您必须声明要传递给此方法的 URL 方案。通过将 LSApplicationQueriesSchemes 键添加到应用程序的 Info.plist 文件来执行此操作。如果您为未使用该键声明的方案调用此方法,则此方法始终返回 false,无论是否安装了适当的应用程序。要了解有关密钥的更多信息,请参阅 LSApplicationQueriesSchemes。


推荐阅读