Название контакта MKPlacemark
У меня отлично работает карта, но вывод, который размещен на карте, имеет название United States. Как я могу изменить этот заголовок?
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];
Ответы
Ответ 1
Довольно старый вопрос, но, возможно, кто-то еще сталкивается с той же проблемой (как и я):
Не добавляйте MKPlacemark к аннотациям карты; вместо этого используйте MKPointAnnotation. Этот класс имеет свойства заголовка и субтитров, которые не являются readonly. Когда вы их устанавливаете, аннотация на карте обновляется соответствующим образом - и это, вероятно, то, что вы хотите.
Чтобы использовать 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];
Вы также можете установить свойства заголовка и субтитров в любое время позже. Например, если у вас запущен асинхронный адресный запрос, вы можете установить субтитры по адресу аннотации, как только будет доступен адрес.
Ответ 2
В приведенном ниже коде показано размещение аннотации на карте с использованием 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];
}
}];
}
Ответ 3
Оформить заказ MKAnnotation Protocol, который соответствует 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