Как автоматически открыть выноску аннотации на карте при первой загрузке карты?

У меня есть приложение на основе навигации для iPhone, над которым я работаю, которое позволяет пользователю просматривать выбор из таблицы на карте. У меня есть аннотация, которая указывает на выбранное пользователем местоположение на карте. Согласно нормальному поведению, если пользователь нажимает на аннотацию, появляется выноска с подробными сведениями о местоположении. Здесь нет проблем.

Мой вопрос: я бы хотел, чтобы выноска автоматически появлялась из аннотации, как только пользователь переходит на экран, содержащий карту, чтобы пользователю не приходилось нажимать на аннотацию, чтобы увидеть подробности о местоположении. , но я не знаю, как это сделать. В моем классе MapViewController есть следующий метод, в котором выполняется основная часть работы по отображению карты:

- (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 вызывается из следующего метода на предыдущем экране:

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

Я понимаю, что для этого мне нужно использовать следующий метод:

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

Однако я не знаю, как это сделать. У меня не так много аннотаций, которые я использую одновременно, у меня есть только одна аннотация, с которой мне нужно работать.

Где мне поместить этот метод в свое приложение и откуда его вызвать?
Могу ли я вызвать этот метод из метода viewDidLoad и поместить фактический метод в свой класс MapViewController?


person syedfa    schedule 09.02.2011    source источник


Ответы (1)


Вы должны добавить

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

в класс, который вы установили в качестве делегата для MKMapView.

person benwong    schedule 09.02.2011
comment
Большое спасибо за быстрый ответ. Мог бы я тогда вызвать метод из метода viewDidLoad? - person syedfa; 09.02.2011
comment
Нет, вам совсем не обязательно звонить напрямую. Он будет автоматически вызываться mapview, пока вы настроите делегата. - person benwong; 09.02.2011
comment
Большое спасибо за ваш ответ. Ваше решение сработало! Заботиться. - person syedfa; 09.02.2011