自定义标注内的按钮视图无响应(Swift)

时间:2014-07-05 03:33:31

标签: ios xcode mkmapview swift mkannotationview

我有一个自定义的MKPinAnnotationView:

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
    if annotation is MKUserLocation {
        //return nil so map view draws "blue dot" for standard user location
        return nil
    }

    let reuseId = "pin"
    var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView

    if pinView == nil {
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.canShowCallout = false
        pinView!.animatesDrop = true
        pinView!.pinColor = .Red
        pinView!.draggable = true;
    } else {
        pinView!.annotation = annotation
    }

    return pinView
}

然后我用这样的按钮添加一个子视图:

func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!) {
    view.addSubview(confirm)
}

问题是子视图内的按钮根本没有响应。可能导致什么?我已经尝试过启用userInteraction。 感谢

1 个答案:

答案 0 :(得分:3)

不确定这是否合适或有帮助但在我的情况下我在哪里设置类似的代码

pinView!.canShowCallout = true

然后如果你想要一个简单的方法来捕捉按钮点击,我在我的ViewContriller中放了一个func:

func buttonClicked (sender : UIButton!) {
    println("Button Clicked")
}

听起来你想要做一些不同的事情。

Opps ..在之前的回答中我忘记了我在

上方添加了按钮
return pinView

...

    let button : UIButton = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as UIButton
    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    pinView!.rightCalloutAccessoryView = button
    return pinView

现在buttonClicked func可以捕获标注。