Подтвердить что ты не робот

Вспомогательный метод и реализация

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

ИЗМЕНИТЬ

Я пробовал эту строку кода, но ничего не происходит с аннотацией.

- (MKAnnotationView *)mapview:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation 
{
MKAnnotationView *aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@""];
aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
aView.canShowCallout = YES;
aView.annotation = annotation;
return aView;
}
4b9b3361

Ответ 1

Имя метода неверно. Он должен быть mapView с капиталом V:

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

Objective-C чувствителен к регистру.

Если метод все еще не вызван, тогда другая проблема заключается в том, что отображение вида delegate не задано. В коде установите его в self или в Interface Builder присоедините делегата к файловому владельцу.

Также убедитесь, что вы установите title аннотации перед добавлением, иначе выноска пока не будет отображаться.

Приведенные выше изменения должны исправить кнопку аксессуара, не появляющуюся.


Некоторые другие несвязанные предложения...

В viewForAnnotation вы должны поддерживать повторное использование вида аннотации, вызывая dequeueReusableAnnotationViewWithIdentifier:

- (MKAnnotationView *)mapView:(MKMapView *)sender viewForAnnotation:(id < MKAnnotation >)annotation
{
    static NSString *reuseId = @"StandardPin";

    MKPinAnnotationView *aView = (MKPinAnnotationView *)[sender 
                dequeueReusableAnnotationViewWithIdentifier:reuseId];
    if (aView == nil)
    {
        aView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation 
                    reuseIdentifier:reuseId] autorelease];
        aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        aView.canShowCallout = YES;
    }

    aView.annotation = annotation;

    return aView;   
}

Если ваш проект использует ARC, удалите autorelease.


Кстати, чтобы ответить на кнопку аксессуаров, нажмите, реализуйте метод делегата calloutAccessoryControlTapped:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
        calloutAccessoryControlTapped:(UIControl *)control
{
    NSLog(@"accessory button tapped for annotation %@", view.annotation);
}