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