1

我已经设置了一个简单的应用程序,它带有一个选项卡式地图视图(选项卡 1 上的地图),它使用 SwiftyJSON 和 Alamofire 从服务器上的 json 文件中读取信息(点信息存储在 MySQL 中)。这些点被加载到地图中。我想做的是在注释中添加一个按钮,该按钮指向不同的视图选项卡并传递点的 ID。

我还没有尝试过任何东西,因为我不知道从哪里开始,并且文档没有提到任何类似的东西。

如何将一个出口添加到地图点注释?

4

2 回答 2

1

当您点击您的图钉时,标注会出现标题和/或副标题。您需要向此标注添加左右标注附件视图。您可以通过遵循 MGLMapViewDelegate 并实现以下方法来做到这一点:

func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
        return true
}

func mapView(_ mapView: MGLMapView, leftCalloutAccessoryViewFor annotation: MGLAnnotation) -> UIView? {
    ...your code here...
    let deleteButton = UIButton(type: .custom)
    deleteButton.tag = 100
}

func mapView(_ mapView: MGLMapView, rightCalloutAccessoryViewFor annotation: MGLAnnotation) -> UIView? {
    ...your code here...
    let infoButton = UIButton(type: .custom)
    infoButton.tag = 101
}

func mapView(_ mapView: MGLMapView, annotation: MGLAnnotation, calloutAccessoryControlTapped control: UIControl) {
    ...your code here...
    switch control.tag {
    case 100:
       // do some delete stuff
    case 101:
       // do some info stuff
    default:
       break 
}

显示实际用法的 MapBox 示例在这里: MapBox 示例。这个例子没有转场,但你只需用按钮点击而不是 UIAlert 来触发转场。

于 2017-01-31T05:43:58.817 回答
1

备查:

func mapView(_ mapView: MGLMapView, annotation: MGLAnnotation, calloutAccessoryControlTapped control: UIControl) {
    // Hide the callout view.
    // mapView.deselectAnnotation(annotation, animated: true)

    performSegue(withIdentifier: "toDetail", sender: view)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    print("Seque toDetail")
    // do stuff
}
于 2017-01-31T09:47:41.290 回答