ios - MKMapView 检测左或右

标签 ios swift mkmapview accessoryview

iOS 11.x swift 4.0

了解 mapview 并使用此代码创建了一个带有左右 accessoryview 的图钉。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation  {
        return nil
    }

    let reuseId = "pin"
    var pav:MKPinAnnotationView?
    if (pav == nil)
    {
        pav = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pav?.isDraggable = true
        pav?.canShowCallout = true;
        pav?.rightCalloutAccessoryView = UIButton(type: .infoLight)
        pav?.leftCalloutAccessoryView = UIButton(type: .contactAdd)
    }
    else
    {
        pav?.annotation = annotation;
    }

    return pav;
}

使用此调用来检测您何时按下 infoLight 和/或 contactAdd UIButtons。但我很难弄清楚如何分辨按下了哪个?这个电话火了?但是怎么判断是左还是右呢?

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    print("go figure annotationView \(view)")
    if (view.rightCalloutAccessoryView != nil) {
        print("right \(view.rightCalloutAccessoryView)")
    }
}

显然这是错误的,但是如何知道点击的是左侧还是右侧?

最佳答案

试试下面的代码:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if view.rightCalloutAccessoryView == control {
        //right accessory
    } else {
        // left Accessory
    }
}

关于ios - MKMapView 检测左或右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49473977/

相关文章:

objective-c - 我应该释放我创建的NSThread吗?

ios - 如何在 Swift 的 NSMutableDictionary 中为键的特定索引附加一个值的数组

ios - iOS 6 MapKit 是否适用于早期版本的 iOS?

ios - 本地图 View 只是屏幕的一部分时,如何在 iOS 模拟器中缩小?

ios - 当提示打开另一个应用程序时,如何处理用户单击取消

ios - 如何从 UITableViewCell 中的 UIButton 调用 Controller 中的方法

ios - 可以延迟 Today Extensions (iOS) 上的功能执行

swift - 如何在 Swift 中声明一个元组并为其成员之一提供运行时函数

java - 为不同的设备生成服务器端图像?

ios - 自定义双击放大 MKMapView (Uber like)