добавить детальКнопка в MKAnnotationView - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу добавить кнопку к представлению аннотации и назначить ему действие. Я вроде понял, что только в моем коде есть небольшая проблема.

// so when I touch the pin , and the annotation view is displayed , I create a button and add it to the view

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
    {

        view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    }
    // when the button is pressed , go to another view 

    - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    {
        NSLog(@"calloutAccessoryControlTapped");
        ArticleViewController *det = [[ArticleViewController alloc]init];
        det.leTitle = view.annotation.title;
        det.link = @"http://en.wikipedia.org/wiki/San_Francisco";
        [self.navigationController pushViewController:det animated:YES];

    }

Теперь проблема в том, что я первый раз касаюсь аннотации и кнопка создается,

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

функция не работает. Только после того, как я отменил выбор аннотации и снова коснулся ее, она работает правильно. Не могли бы вы помочь мне улучшить мой код? Благодарю.

1 Ответ

6 голосов
/ 28 февраля 2012

Нашёл!

Мне просто нужно было добавить кнопку в функцию, которая вызывается перед той, в которую я положил её первой.

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != mapViewHandler.userLocation) 
    {
        static NSString *defaultPinID = @"myPin";
        pinAnnotation = (MKPinAnnotationView *)[mapViewHandler dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinAnnotation.canShowCallout = YES;

        //instatiate a detail-disclosure button and set it to appear on right side of annotation
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = infoButton;

    }

    return pinAnnotation;
}
...