Метод делегата mkmapview не вызывается -calloutaccessorycontroltapped

Я пытаюсь завершить последнюю часть задания 5 из cs193p ( ссылка)

Приложение выбирает популярные места из Flickr и строит фотографии из этих мест на карте.

Это задача 5с, которая говорит

Каждая аннотация на карте должна иметь сноску, которая отображает следующее: c. Кнопка раскрытия, которая отображает полное изображение выбранной фотографии (точно так же, как если бы пользователь выбрал фотографию из таблицы) или которая отображает список фотографий в этом месте (опять же, точно так же, как если бы пользователь выбрал это место из таблицы).

Я уже завершил предыдущие части, которые отображают выноску и загружают миниатюру в выноску.

Я уже настроил свой mapViewController в качестве делегата mapView, и я знаю, что он работает, потому что когда я нажимаю на булавку, он вызывает метод didSelectAnnotationView, который также находится в моем mapViewController и который все работает нормально, и фактически отображает раскрытие аксессуара в выноске.

Однако я также определил метод calloutAccessoryControlTapped (тот же VC), и этот метод не вызывается. Совсем. На данный момент у меня есть только NSLog, и ничего не происходит.

Ну, я ничего не говорю, просто чтобы сделать это более странным, есть одна аннотация, которая работает для сотен, которые этого не делают.

Одна аннотация с самого первого места запускает кнопку, но больше ничего не делает. Это потому, что это первая аннотация? Кнопка только стреляет для этого?

Я хотел опубликовать код, но не совсем уверен, насколько он актуален:

 @interface flickrthingMapViewController ()<MKMapViewDelegate>
    @property (weak, nonatomic) IBOutlet MKMapView *mapview;

    @end

    @implementation flickrthingMapViewController
    @synthesize delegate = _delegate;

    @synthesize mapview = _mapview;
    @synthesize annotations = _annotations;


    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.mapview.delegate = self; //remembered to set the delegate

    }
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView
{
    if (![aView.annotation isKindOfClass:[flickrthingPlaceAnnotation class]])
    {
        UIImage *image = [self.delegate flickrthingMapViewContoller:self imageForAnnotation:aView.annotation];


        [(UIImageView *)aView.leftCalloutAccessoryView setImage:image];
    }
    UIButton *buttonToViewDetails = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    aView.rightCalloutAccessoryView=buttonToViewDetails;


}

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)aView calloutAccessoryControlTapped:(UIControl *)control
{

    NSLog(@"hello");
}

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

Спасибо за ваши идеи!

1 ответ

Решение

Оказывается, что добавление кнопки в didSelectAnnotationView слишком поздно!

Я думал, что пытаюсь быть эффективным, не создавая кнопку, если кто-то на самом деле не выбрал аннотацию, но оказывается, что (по какой-то причине?), Если кнопка создается в didSelectAnnotationView, она не вызывает метод делегата.

Я переместил его в метод viewForAnnotation, и он работает!

Другие вопросы по тегам