2011-02-09 10 views
6

Tengo una aplicación de navegación para el iPhone que estoy trabajando que permite al usuario ver una selección de una tabla, en un mapa. Tengo una anotación que identifica la ubicación seleccionada del usuario en el mapa. Según el comportamiento normal, si el usuario hace clic en la anotación, aparece una leyenda con los detalles sobre la ubicación. No hay problemas aqui¿Cómo abrir la leyenda de anotación en el mapa automáticamente cuando el mapa se carga por primera vez?

Mi pregunta es, me gustaría que la leyenda aparezca automáticamente de la anotación, una vez que se lleva al usuario a la pantalla que contiene el mapa, para que el usuario no tenga que hacer clic en la anotación para ver el detalles sobre la ubicación, pero no estoy seguro de cómo hacer esto. Tengo el siguiente método en mi clase "MapViewController", donde se realiza la mayor parte del trabajo de visualización del mapa:

- (void)viewDidLoad { 

    [super viewDidLoad]; 
MKCoordinateRegion region; 
MKCoordinateSpan span; 

NavButtonAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
userCoord = delegate.userLocation.coordinate; 

region.center = userCoord; 
span.latitudeDelta = 0.4; 
span.longitudeDelta = 0.4; 
region.span = span; 

[mapView setMapType:MKMapTypeStandard]; 
[mapView setZoomEnabled:YES]; 
[mapView setScrollEnabled:YES]; 
mapView.showsUserLocation = YES; 
[mapView setRegion:region animated:YES]; 

RestaurantAnnotation *rAnnotation = [[RestaurantAnnotation alloc] init]; 
rAnnotation.title = restaurantObj.name; 
rAnnotation.subtitle = restaurantObj.address; 
rAnnotation.subtitle = [restaurantObj.address stringByAppendingFormat:@" %@", restaurantObj.hours]; 
rAnnotation.subtitle = [restaurantObj.address stringByAppendingFormat:@" %@", restaurantObj.phoneNumber]; 


CLLocationCoordinate2D newCoord = {restaurantObj.latitude, restaurantObj.longitude}; 
rAnnotation.coordinate = newCoord; 
[mapView addAnnotation:rAnnotation]; 

} 

El MapViewController se llama desde el método siguiente en la pantalla anterior:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

Restaurant *rLocation = [restaurantList objectAtIndex:indexPath.row]; 

MapViewController *mapController = [[MapViewController alloc] initWithRestaurant:rLocation]; 
[self.navigationController pushViewController:mapController animated:YES]; 
[mapController release]; 
} 

Me doy cuenta de que tengo que usar el siguiente método para lograr esto:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    id<MKAnnotation> myAnnotation = [mapView.annotations objectAtIndex:0]; 
    [mapView selectAnnotation:myAnnotation animated:YES]; 
} 

Sin embargo, no estoy seguro de cómo. No tengo muchas anotaciones que estoy usando todas a la vez, solo tengo una anotación con la que necesito que trabaje.

¿Dónde pongo este método en mi aplicación, y dónde lo llamo desde?
¿Llamo a este método desde el método viewDidLoad y pongo el método real dentro de mi clase MapViewController?

Respuesta

12

hay que añadir

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    id myAnnotation = [mapView.annotations objectAtIndex:0]; 
    [mapView selectAnnotation:myAnnotation animated:YES]; 
} 

a la clase que haya establecido como el delegado para la MKMapView.

+0

Muchas gracias por su pronta respuesta. ¿Llamaré al método desde el método viewDidLoad? – syedfa

+0

No, no tiene que llamarlo directamente. La vista del mapa lo llamará automáticamente siempre que configure el delegado. – benwong

+1

Muchas gracias por su respuesta. Tu solución funcionó! Cuídate. – syedfa

Cuestiones relacionadas