在点击地图注释引脚时执行segue

时间:2013-12-23 21:11:15

标签: ios objective-c ios7 mkmapview mkannotation

我正在尝试在点击地图注释引脚时执行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方法似乎会让这很容易,但我不确定它是如何工作的。

2 个答案:

答案 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。