Заголовок метки MKPlacemark

У меня нормально работает представление карты, но булавка, размещенная на карте, имеет название «США». Как я могу изменить это название?

    MKCoordinateRegion thisRegion = {{0.0,0.0}, {0.0,0.0}};

        thisRegion.center.latitude = 22.569722;
        thisRegion.center.longitude = 88.369722;

        CLLocationCoordinate2D coordinate;
        coordinate.latitude = 22.569722;
        coordinate.longitude = 88.369722;

        thisRegion.center = coordinate;

        MKPlacemark *mPlacemark = [[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil] autorelease];

        [mapView addAnnotation:mPlacemark];
        [mapView setRegion:thisRegion animated:YES];

person Jesse    schedule 21.10.2011    source источник


Ответы (3)


Довольно старый вопрос, но, возможно, кто-то еще наткнется на ту же проблему (как и я):

Не добавляйте MKPlacemark к аннотациям карты; вместо этого используйте MKPointAnnotation. Этот класс имеет свойства заголовка и подзаголовка, которые доступны не только для чтения. Когда вы их устанавливаете, аннотация на карте обновляется соответствующим образом — и это, вероятно, то, что вы хотите.

Чтобы использовать MKPointAnnotation в своем коде, замените строки, которые выделяют и добавьте MKPlacemark следующим кодом:

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = coordinate;
annotation.title = NSLocalizedString(@"Dropped Pin",
                                     @"Title of a dropped pin in a map");
[mapView addAnnotation:annotation];

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

person Markus    schedule 31.10.2012

В приведенном ниже коде показано размещение аннотации на карте с помощью CLGeocoder в iOS 5.1.

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

// Apple recommendation - if location is older than 30s ignore
// Comment out below during development
/*  if (fabs([newLocation.timestamp timeIntervalSinceDate:[NSDate date]]) > 30) {
    NSLog(@"timestamp");
    return;
}*/   

CLLocation *coord = [[CLLocation alloc] initWithLatitude:locationManager.location.coordinate.latitude longitude:locationManager.location.coordinate.longitude];                            
[geocoder reverseGeocodeLocation:coord completionHandler:^(NSArray *placemarks, NSError *error) {

    if (error) {
        NSLog(@"Geocode failed with error");
    }

    // check for returned placemarks
    if (placemarks && placemarks.count > 0) {
        CLPlacemark *topresult = [placemarks objectAtIndex:0];
        MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
        annotation.coordinate = locationManager.location.coordinate;
        annotation.title = NSLocalizedString(@"You are here", @"Title");
        annotation.subtitle = [NSString stringWithFormat:@"%@, %@", [topresult subAdministrativeArea], [topresult locality]];
        [self.mapView addAnnotation:annotation];
    }
}];
}
person Jaminyah    schedule 07.12.2012

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

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKAnnotation_Protocol/Reference/Reference.html

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKPlacemark_Class/Reference/Reference.html

person logancautrell    schedule 21.10.2011
comment
Проблема в том, что mkPlacemark.title является свойством только для чтения, а MKPointAnnotation доступно только для iOS13+. - person cat; 13.04.2021