MKAnnotationView Push to View Controller cuando se hace clic en el botón DetailDesclosure

Me gustaría cambiar las vistas cuando se hace clic en DetailDisclosure en un mapa que estoy mostrando. Mi código actual es el siguiente:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; detailViewController.title = dictionary[@"placeLatitude"] [self.navigationController pushViewController:detailViewController animated:YES]; } 

Puedo presionar al controlador de vista con esto, pero no he descubierto cómo forzarlo a extraer detalles de la matriz JSON utilizada para generar el mapa en primer lugar. Estoy extrayendo datos como este para generar el mapa:

  for (NSDictionary *dictionary in array) { // retrieve latitude and longitude from the dictionary entry location.latitude = [dictionary[@"placeLatitude"] doubleValue]; location.longitude = [dictionary[@"placeLongitude"] doubleValue]; //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE? 

Sé que estoy un poco fuera de lugar. Tal vez solo una patada en la dirección correcta podría ayudar. ¡Gracias!

Si está utilizando guiones gráficos y tiene una transición de su escena actual a su escena de destino, puede simplemente responder a la calloutAccessoryControlTapped de calloutAccessoryControlTapped . Por ejemplo:

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { [self performSegueWithIdentifier:@"Details" sender:view]; } 

Obviamente, puede verificar el tipo de anotación asociada con esa view , etc., si tiene diferentes segues a los que desea llamar para diferentes tipos de anotación.

Y, por supuesto, si desea pasar cualquier información a la siguiente escena en prepareForSegue como de costumbre.

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"Details"]) { MKAnnotationView *annotationView = sender; [segue.destinationViewController setAnnotation:annotationView.annotation]; } } 

Como puede ver, paso el objeto de annotation a mi siguiente vista. Si tiene campos adicionales en su estructura JSON que están asociados con cada anotación, una solución fácil es agregar propiedades a su vista personalizada asociada para cada uno de los campos que desea rastrear. Simplemente vaya a .h para su clase personalizada de anotación y agregue las propiedades que necesita. Y luego, cuando crea sus anotaciones personalizadas (que se agregarán al mapa), solo establezca estas propiedades también. Luego, cuando pase esta anotación al siguiente controlador de vista, todas las propiedades deseadas estarán disponibles allí.


Claramente, si está usando NIB, solo haga los equivalentes de NIB de lo que quiera para crear una instancia del siguiente controlador de vista, establezca las propiedades que desee y, ya sea presionándolo o presentándolo de manera modal, por ejemplo:

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil bundle:nil]; controller.annotation = annotationView.annotation; [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals }