2012-02-28 3 views
0

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

// 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 

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

ответ

6

Нашли это!

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

- (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; 
} 
+0

Не забудьте принять ваш ответ, если проблема решена. –