2011-02-09 14 views
6

Mam aplikację opartą na nawigacji dla iPhone'a, nad którym pracuję, która pozwala użytkownikowi przeglądać wybór z tabeli na mapie. Mam adnotację, która wskazuje wybraną lokalizację użytkownika na mapie. Zgodnie z normalnym zachowaniem, jeśli użytkownik kliknie adnotację, pojawi się objaśnienie z informacjami o lokalizacji. Żadnych problemów tutaj.Jak automatycznie otworzyć objaśnienie adnotacji na mapie po załadowaniu mapy?

Moje pytanie brzmi: chciałbym, aby objaśnienie pojawiło się automatycznie z adnotacji, gdy użytkownik zostanie przeniesiony na ekran zawierający mapę, aby użytkownik nie musiał klikać adnotacji, aby zobaczyć szczegóły dotyczące lokalizacji, ale nie jestem pewien, jak to zrobić. Mam następujące metody w moim klasy „MapViewController”, gdzie wykonywana jest większość prac wyświetlania mapy:

- (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]; 

} 

MapViewController nazywa z następującym sposobem poprzedniego ekranu:

- (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]; 
} 

Zdaję sobie sprawę, że muszę wykonać następujące czynności, aby to osiągnąć:

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

Jednak nie jestem pewien jak. Nie mam wielu adnotacji, których używam na raz, mam tylko jedną adnotację, której potrzebuję do pracy.

Gdzie umieścić tę metodę w mojej aplikacji i skąd ją nazywam?
Czy mogę wywołać tę metodę z metody viewDidLoad i umieścić właściwą metodę w mojej klasie MapViewController?

Odpowiedz

12

Trzeba dodać

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

do klasy, które można ustawić jako delegat na MKMapView.

+0

Dziękuję bardzo za szybką odpowiedź. Czy wtedy wywołać metodę z metody viewDidLoad? – syedfa

+0

Nie, nie musisz w ogóle dzwonić bezpośrednio. Będzie on automatycznie wywoływany przez widok mapy, dopóki konfigurujesz delegata. – benwong

+1

Dziękuję bardzo za odpowiedź. Twoje rozwiązanie zadziałało! Dbać. – syedfa

Powiązane problemy