У меня есть вид карты, который добавляет аннотации более или менее следующим образом:
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>) annotation
{
MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"MKPinAnnotationView"];
annotationView.canShowCallout = YES;
UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[detailButton addTarget:self
action:@selector(handleButtonAction)
forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView = detailButton;
return annotationView;
}
В iOS 7 это помещает значок "i" в правую часть выноски. Нажатие на иконку запускает mapView:annotationView:calloutAccessoryControlTapped:
(на делегате) и handleButtonAction:
(для себя). Однако я недавно понял, что вы также можете нажать в другом месте на выноске, и будут запущены те же самые два метода.
Это происходит с помощью кнопки типа UIButtonTypeDetailDisclosure
, но, похоже, она не работает с кнопкой UIButtonTypeCustom
. Метод делегата также не запускается, когда я нажимаю на выноску, когда нет аксессуаров вообще. (Это поведение, конечно, не удивительно: удивительно, что если вспомогательный вид является кнопкой раскрытия подробностей, эти два метода запускаются независимо от того, нажимаете ли вы на кнопку непосредственно или где-то еще в выноске.)
Id нравится избавляться от кнопки в выноске или, по крайней мере, заменять ее кнопкой, отображающей мое собственное изображение вместо значка "i" на складе, в то же время позволяя пользователю нажимать в любом месте выноски для запуска моего действие. Это возможно? Я не вижу метод MKMapViewDelegate
, который соответствует "выносу".