Метод делегата 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, и он работает!