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 函数中的所有代码就开始工作了。
大家好,我正在使用 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 函数中的所有代码就开始工作了。