在calloutAccessoryControlTapped(从parse.com获取数据)时准备segue

时间:2014-11-27 17:05:27

标签: xcode parse-platform mkmapview segue mkannotation

单击时我的注释出现问题并将数据发送到“Prepare to segue”

我用过这段代码:

- (void)viewDidLoad {
[super viewDidLoad];

PFQuery *query = [PFQuery queryWithClassName:@"Ristoranti"];

        [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

            if (!error)
            {

                NSLog(@"QUERY -----> :%@", objects);


                for(NSMutableDictionary *note1 in objects) {
                    float realLatitude1 = [[note1 objectForKey:@"Latitudine"] floatValue];
                    float realLongitude1 = [[note1 objectForKey:@"Longitudine"] floatValue];

                    NSLog(@"(PARSE) Latitudine: %f", realLatitude1);
                    NSLog(@"(PARSE) Longitudine: %f", realLongitude1);


                    DisplayMap *displayMap = [[DisplayMap alloc] init];

                    CLLocationCoordinate2D theCoordinate;
                    theCoordinate.latitude = realLatitude1;
                    theCoordinate.longitude = realLongitude1;
                    displayMap.coordinate = theCoordinate;
                    displayMap.title = [note1 objectForKey:@"NomeLocale"];
                    displayMap.subtitle = [note1 objectForKey:@"Indirizzo"];
                    displayMap.icon = [note1 objectForKey:@"PinMappa"];
                    [_mapView setDelegate:self];
                    [_mapView addAnnotation:displayMap];
                }
            }
        }];
}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if (![annotation isKindOfClass:[DisplayMap class]])
    {

        return nil;
    }

    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";

    MKAnnotationView *pinView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];

    if (pinView == nil)
    {
        pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
        pinView.canShowCallout = YES;
    }
    else
        pinView.annotation = annotation;


    DisplayMap *myAnn = (DisplayMap *)annotation;
    pinView.image = [UIImage imageNamed:myAnn.icon];



    // Create a UIButton object to add on the
    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    [pinView setRightCalloutAccessoryView:rightButton];

    return pinView;
}

- (void)mapView:(MKMapView *)mapView
 annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    if ([(UIButton*)control buttonType] == UIButtonTypeDetailDisclosure)
    {


        NSLog(@"The annotation tapped is: %@", view.annotation.title);


        NSUInteger index = [mapView.annotations indexOfObject:view.annotation];

        NSLog(@"%lu", (unsigned long)index);


        //[self performSegueWithIdentifier:@"Prova" sender:self];

    }  
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"Prova"]) {

        DettagliAlberghi *destViewController = segue.destinationViewController;

        DisplayMap *displayMap = [[DisplayMap alloc] init];

        displayMap.title = [note1 objectForKey:@"NomeLocale"];
        displayMap.subtitle = [note1 objectForKey:@"Indirizzo"];
        displayMap.icon = [note1 objectForKey:@"PinMappa"];
        displayMap.Telefono = [note1 objectForKey:@"Telefono"];
        displayMap.Email = [note1 objectForKey:@"Email"];
        displayMap.Sito = [note1 objectForKey:@"Sito"];
        displayMap.TipologiaLocale = [note1 objectForKey:@"TipologiaLocale"];
        displayMap.Cucina = [note1 objectForKey:@"Cucina"];
        displayMap.Vegano = [note1 objectForKey:@"Vegano"];
        displayMap.Valutazione = [note1 objectForKey:@"Valutazione"];
        displayMap.Latitudine = [note1 objectForKey:@"Latitudine"];
        displayMap.Longitudine = [note1 objectForKey:@"Longitudine"];
        displayMap.Anteprima1 = [note1 objectForKey:@"Anteprima1"];
        displayMap.Anteprima2 = [note1 objectForKey:@"Anteprima2"];
        displayMap.Anteprima3 = [note1 objectForKey:@"Anteprima3"];
        displayMap.FaceB = [note1 objectForKey:@"Facebook"];
        displayMap.Twit = [note1 objectForKey:@"Twitter"];




        NSLog(@"Dettagli Ristorante: \n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@", displayMap.title, displayMap.subtitle, displayMap.Telefono, displayMap.Email, displayMap.Sito, displayMap.TipologiaLocale, displayMap.Cucina, displayMap.Vegano, displayMap.Valutazione, displayMap.Latitudine, displayMap.Longitudine, displayMap.Anteprima1, displayMap.Anteprima2, displayMap.Anteprima3, displayMap.FaceB, displayMap.Twit);




        destViewController.recipes = displayMap;

    }
}

我想了解如何识别按下某些注释并通过“PrepareForSegue”将数据发送到下一页。 有谁知道如何帮助我?我要疯了。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您只想使用mapView:didSelectAnnotationView:委托调用。

https://developer.apple.com/documentation/mapkit/mkmapviewdelegate/1452393-mapview

在mapView:didSelectAnnotationView中,通过performSegueWithIdentifier调用segue调用。

[self performSegueWithIdentifier:@"Prova" sender:self];

假设您根据所选的注释在mapView:didSelectAnnotationView中设置“note1”。