当我点击注解视图和this behavior it's right时,也会调用我的calloutAccessoryControlTapped
。但是,我如何检测用户是否点击了右侧附件视图(在我的情况下是详细信息显示按钮)而不仅仅是在视图中?
我添加了一个简单的检查,但它不起作用。
import UIKit
import MapKit
extension MapVC: MKMapViewDelegate, CLLocationManagerDelegate
{
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl)
{
if control == view.rightCalloutAccessoryView
{
... // enter here even if I tapped on the view annotation and not on button
}
}
}
2条答案
按热度按时间mu0hgdu01#
要实现这一点,您需要为右侧附件视图添加目标。您可以通过将按钮设置为rightCalloutAccessoryView来实现这一点,如代码片段所示。
jc3wubiy2#
1.使用UIView和UITapGestureRecognizer而不是UIControl
当您单击
rightCalloutAccessoryView
时,只有didClickGestureRecognizer
会被调用,但是您的calloutAccessoryControlTapped
不能被任何人调用。2.如果您的UI控件为
rightCalloutAccessoryView
,则可以直接点击MKAnnotationView。否则无法点击MKAnnotationView。当您点击
rightCalloutAccessoryView
或直接点击MKAnnotationView时,将调用您的选择器和calloutAccessoryControlTapped
3.如果您有一个UIControl
leftCalloutAccessoryView
,当您点击它时,您的选择器和calloutAccessoryControlTapped
都将被调用。4.从iOS 9开始,您可以在MKAnnotationView中添加
detailCalloutAccessoryView
。当您点击它时,只有您的选择器会被调用。5.您还可以创建自己的自定义MKAnnotationView,并更改其行为。