iOS - MKPlacemark устанавливает выпуск заголовка - PullRequest
2 голосов
/ 08 марта 2012

У меня проблемы с установкой заголовка и субтитра моей метки.

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
            [geocoder geocodeAddressString:location 
                 completionHandler:^(NSArray* placemarks, NSError* error){
                     if (placemarks && placemarks.count > 0) {
                         CLPlacemark *topResult = [placemarks objectAtIndex:0];
                         MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

                         placemark.title = @"Some Title";
                         placemark.subtitle = @"Some subtitle";

                         MKCoordinateRegion region = self.mapView.region;
                         region.center = placemark.region.center;
                         region.span.longitudeDelta /= 8.0;
                         region.span.latitudeDelta /= 8.0;

                         [self.mapView setRegion:region animated:YES];
                         [self.mapView addAnnotation:placemark];
                     }
                 }
             ];

placemark.title = @"Some Title"; и placemark.subtitle = @"Some subtitle";

дай мне ошибку:

Assigning to property with 'readonly' attribute not allowed

Почему я не могу установить здесь заголовок и субтитры?

1 Ответ

7 голосов
/ 07 июля 2012

Думал, что разбуду этот поток и дам вам решение, которое я нашел.

Насколько я знаю, заголовок / подзаголовок MKPlacemark являются свойствами только для чтения из-за присущего назначения.Однако с найденным решением вы можете просто передать свой MKPlacemark в MKPointAnnotation следующим образом:

CLPlacemark *topResult = [placemarks objectAtIndex:0];

// Create an MLPlacemark

MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

// Create an editable PointAnnotation, using placemark's coordinates, and set your own title/subtitle
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = @"Sample Location";
point.subtitle = @"Sample Subtitle";


// Set your region using placemark (not point)          
MKCoordinateRegion region = self.mapView.region;
region.center = placemark.region.center;
region.span.longitudeDelta /= 8.0;
region.span.latitudeDelta /= 8.0;

// Add point (not placemark) to the mapView                                              
[self.mapView setRegion:region animated:YES];
[self.mapView addAnnotation:point];

// Select the PointAnnotation programatically
[self.mapView selectAnnotation:point animated:NO];

Обратите внимание, что окончательный [self.mapView selectAnnotation:point animated:NO]; - это обходной путь, позволяющий автоматически выдавать метку.Однако кажется, что часть animated:BOOL работает только с NO в iOS 5. Возможно, вы захотите применить обходной путь, если у вас возникнут проблемы с ручным отображением точечной аннотации, которую можно найти здесь: MKAnnotation не выбираетсяв iOS5

Я уверен, что вы уже нашли свое собственное решение к настоящему времени, но я надеюсь, что это, в некотором роде, информативно.

...