【问题标题】:Button inside custom Callout View not responding (Swift)自定义标注视图中的按钮没有响应(Swift)
【发布时间】:2014-07-05 03:33:31
【问题描述】:

我有一个这样创建的自定义 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。 谢谢

【问题讨论】:

  • 您不想使用内置的 rightCalloutAccessoryView 或 leftCalloutAccessoryView 属性?如果将它们设置为 UIButton,点击它们将调用 calloutAccessoryControlTapped 委托方法。

标签: ios xcode mkmapview swift mkannotationview


【解决方案1】:

不确定这是否适合或有帮助,但就我而言,我设置了类似的代码

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 函数可以捕获标注。

【讨论】:

  • 如果我用这个替换我当前的视图,当一个图钉被点击时什么都不会显示...我还需要向 MKAnnotationView 添加一个子视图吗?
猜你喜欢
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多