calloutAccessoryControlTapped未被调用

时间:2015-09-07 17:03:11

标签: objective-c mkmapview mapkit mkannotation calloutview

我正在尝试使用CalloutAccessory功能,但委托方法永远不会被调用。我已经正确设置了委托,因为我的代码中的其他mapview委托方法正常运行,但由于某种原因,在点击按钮时,委托方法永远不会被调用。

我尝试从MKAnnotationView和MKPinAnnotationView扩展RouteViewAnnotation,它没有任何区别......委托方法永远不会被调用。

我错过了什么?我是否还需要其他不适合此工作的东西? RouteAnnotationView只是覆盖了drawrect,并且没有其他代码。

相关守则:

在ViewForAnnotation中

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{
if([annotation isMemberOfClass:[RouteAnnotation class]])
{
    RouteAnnotationView *routeAnnotationView = [[RouteAnnotationView alloc] initWithFrame:(CGRectMake(0,0,100,50))] ;
    [routeAnnotationView setBackgroundColor:[UIColor clearColor]];
    routeAnnotationView.centerOffset = CGPointMake(0,-25);
    routeAnnotationView.canShowCallout = TRUE;
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100.0, 40.0)];

    [button setTitle:@"Select" forState:UIControlStateNormal];

    button.backgroundColor = [UIColor blueColor];

    [routeAnnotationView setRightCalloutAccessoryView:button];

    return routeAnnotationView;

}
.
.
.
}

在calloutAccssoryControlTapped

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(@"CALLOUT BUTTON TOUCHED");
}

1 个答案:

答案 0 :(得分:2)

好吧,我想通了......我将一个tapGestureRecognizer分配给MapView(确切地说是一个WildcardGestureRecognizer(https://github.com/OrbJapan/ResizableMKCircleOverlay/blob/master/MapView/WildcardGestureRecognizer.m))添加到我的MapView中,虽然它没有以任何方式干扰注释我正在使用的MapView或MapView Delegate方法中的触摸或其他触摸,由于某种原因,这完全干扰了calloutAccessoryControlTapped Delegate方法,并且它从未被调用...一旦我删除了这个没有问题的方法。