Jak zadzwonić do segue z przycisku ujawnienia na pinezce mapy?

Mam aplikację, która rysuje szpilki na widoku mapy.

Każdy pin używa tego kodu do wyświetlenia przycisku ujawniania szczegółów, który po dotknięciu wywołuje metodę showDetail, która następnie wywołuje metodę prepareForSegue. Myślę, że jest tu dużo dodatkowej pracy.

Czy powinienem wyeliminować showDetail i po prostu wywołać metodę prepareForSegue? ale jak mógłbym przekazać obiekt MyLocation?

Oto kod:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    static NSString *identifier = @"MyLocation";
    if ([annotation isKindOfClass:[MyLocation class]]) {

        //test if mapviewnil
        if (_mapView == nil) {
            NSLog(@"NIL");
        }
        MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (annotationView == nil) {
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        } else {
            annotationView.annotation = annotation;
        }

        annotationView.enabled = YES;
        annotationView.canShowCallout = YES;
        annotationView.image=[UIImage imageNamed:@"locale.png"];


        //instatiate a detail-disclosure button and set it to appear on right side of annotation
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [infoButton addTarget:self action:@selector(showDetailView:annotation:) forControlEvents:UIControlEventTouchUpInside];
        annotationView.rightCalloutAccessoryView = infoButton;

        return annotationView;
    }

    return nil;
}

-(void)showDetailView:(id <MKAnnotation>)annotation{

    //Set the data
    MyLocation *sendingLocation = annotation;

    DetailViewController *destinationViewController = segue.destinationViewController;
    destinationViewController.receivedLocation = sendingLocation;
    [self performSegueWithIdentifier: @"DetailVC" sender: self];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"DetailVC"]) {
        NSLog(@"DetailVC called");
    } else {
        NSLog(@"PFS:something else");
    }
}

Thx z góry!

questionAnswers(1)

yourAnswerToTheQuestion