地图注释不会为rightCalloutAccessoryView显示自定义UIButton

时间:2017-01-16 23:50:55

标签: ios swift

我有一张包含数十个注释的地图。注释正确显示标题和副标题,我想在它们的右侧添加一个自定义的“开始”按钮。 Go按钮将打开Apple Maps并向用户提供他们在地图上查看的注释的说明。

我已经复制了我正在使用的代码。在它的当前形式中,不会出现任何按钮。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if !(annotation is MKUserLocation) {
        let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: String(annotation.hash))

        let rightButton = UIButton(type: .custom)
        rightButton.setImage(UIImage(named: "Go"), for: .normal)
        rightButton.tag = annotation.hash

        pinView.canShowCallout = true
        pinView.rightCalloutAccessoryView = rightButton

        return pinView
    }
    else {
        return nil
    }
}

如果我删除以下行:

rightButton.setImage(UIImage(named: "Go"), for: .normal)

并将其上方的一个更改为:

let rightButton = UIButton(type: .detailDisclosure)

按钮确实正确显示,这告诉我尝试使用按钮的自定义图像时出现问题。

关于我缺少的任何想法?

1 个答案:

答案 0 :(得分:0)

我能够通过将UIButton类型更改为以下内容来纠正它:

let rightButton = UIButton(type: .infoLight)

我的代码段现在看起来如此:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if !(annotation is MKUserLocation) {
        let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: String(annotation.hash))

        let rightButton = UIButton(type: .infoLight)
        rightButton.setImage(UIImage(named: "Go"), for: .normal)
        rightButton.tag = annotation.hash

        pinView.canShowCallout = true
        pinView.rightCalloutAccessoryView = rightButton

        return pinView
    }
    else {
        return nil
    }
}