我正在尝试在点击地图注释引脚时执行segue。我使用自定义注释类,如果这有所作为。
我试过
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
NSLog(@"annotation selected");
[self performSegueWithIdentifier:@"mySegue" sender:self];
}
但是我的NSLog没有运行,所以我假设该方法没有被调用。
我所做的唯一其他事情是将注释引脚添加到我的地图视图中,并将我的视图控制器设置为地图视图委托。
以下是我如何将注释添加到mapview
SPMapAnnotation *pin = [[SPMapAnnotation alloc] init];
pin.coordinate = spotLocation.coordinate;
pin.title = [spot objectForKey:@"spotName"];
[self.mapView addAnnotation:pin];
我该如何使这项工作? didSelectAnnotation方法似乎会让这很容易,但我不确定它是如何工作的。
答案 0 :(得分:2)
显然我忘了我没有分配我的mapView直到viewDidAppear。只需添加
self.mapView.delegate = self;
在我分配并插入之后。
答案 1 :(得分:0)
实施以下委托方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *annotationView = nil;
if ([annotation isKindOfClass:[SPMapAnnotation class]])
{
annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
if (annotationView == nil)
{
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
annotationView.canShowCallout = YES;
annotationView.animatesDrop = YES;
}
}
return annotationView;
}
因为不会为标准注释引脚调用didSelectAnnotationView,所以需要返回要调用的didSelectAnnotationView的MKAnnotationView。