iphone - выноска MKMapView не отображается на iPhone 4 с iOS 4.1 - PullRequest
4 голосов
/ 14 июня 2011

У меня проблема с MKMapView. Я добавляю аннотации вот так:

// set up new points
for(int i = 0; i < [_locations count]; i++) {
    PPlace * place = [_locations objectAtIndex:i];
    PlaceAnnotation * placeAnnotation = [[PlaceAnnotation alloc] initWithPlace:place];
    // if annotation is for currently selected place
    placeAnnotation.isCurrent = i == currentIndexPath.row;
    [self.mapView addAnnotation:placeAnnotation];
    if (placeAnnotation.isCurrent) {
        [self.mapView selectAnnotation:placeAnnotation animated:YES];
    }
    [placeAnnotation release];
}

Поэтому я пытаюсь отображать выноску дважды после добавления, а не после нажатия на пин-код аннотации. Все отлично работает в симуляторе, также на iPhone 3GS с iOS 4.3.2. Однако выноски не отображаются на iPhone 4 с iOS 4.1 (они отображаются только после нажатия на пин-код). Есть идеи как это решить?

Ответы [ 4 ]

1 голос
/ 25 июня 2011

Я предполагаю, что вы не присвоили значение свойству title вашего класса аннотаций.Даже если вы можете установить для canShowCallout значение YES, всплывающее окно вызова не будет отображаться, если в заголовке нет чего-либо.

0 голосов
/ 17 июля 2012

Вы звоните не в то время. Вы не можете выбрать его, пока он не загрузится.

Используйте метод делегата MKMapView:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views

И изнутри этого вызова метода:

[yourMapView selectAnnotation: yourAnnotation animated: YES];
0 голосов
/ 04 июля 2012

Вам нужно будет реализовать следующий метод:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

Вы можете найти документацию здесь

0 голосов
/ 22 июня 2011

попробуйте добавить

placeAnnotation.canShowCallout = YES;

так выглядит:

// set up new points
for(int i = 0; i < [_locations count]; i++) {
    PPlace * place = [_locations objectAtIndex:i];
    PlaceAnnotation * placeAnnotation = [[PlaceAnnotation alloc] initWithPlace:place];
    // if annotation is for currently selected place
    placeAnnotation.isCurrent = i == currentIndexPath.row;
    [self.mapView addAnnotation:placeAnnotation];
    if (placeAnnotation.isCurrent) {
        [self.mapView selectAnnotation:placeAnnotation animated:YES];
        placeAnnotation.canShowCallout = YES;
    }
    [placeAnnotation release];
}

надеюсь, это поможет! WeSaM

...