2012-11-23 164 views
1

我米使用的MKMapView點擊按鈕MKAnnotationView

一個應用程序的工作有一些註釋和當u點擊標註圖像上,詳細信息將顯示

的,我已經建立我的自定義@interface譯註: NSObject的並增加了一個布爾值「bClicked」

現在我希望用戶能夠點擊的DetailView內部細節按鈕,但代碼中,我已經做出不工作:

#pragma mark - MKMapViewDelegate 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
    MKAnnotationView *annotationView = nil; 


    int index = 0; 

    BOOL bFound = FALSE; 

    for (int i=0;i<[shopAnnotations count];i++) 
    { 
     if (annotation == [shopAnnotations objectAtIndex:i]) 
     { 
      index = i; 
      bFound = TRUE; 
      break; 
     } 
    } 

    if (bFound==FALSE) 
    { 
     //ADLog(@"bFound FALSE annotation %p",annotation); 
     return annotationView; // <-- nil 
    } 


    Annotation *shopAnnotation = [shopAnnotations objectAtIndex:index]; 

    annotationView = [_mapView dequeueReusableAnnotationViewWithIdentifier:shopAnnotation.identifier]; 

    if (!annotationView) 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:shopAnnotation reuseIdentifier:shopAnnotation.identifier] autorelease]; 

    for (UIView*view in annotationView.subviews) 
    { 
     [view removeFromSuperview]; 
    } 

    annotationView.image = shopAnnotation.Image; 
    annotationView.alpha = 1.0f; 
    annotationView.enabled = YES; 
    annotationView.canShowCallout = YES; 

    annotationView.userInteractionEnabled = YES; 

    if (shopAnnotation.bClicked==TRUE) 
    { 

     UIView *detailView = [[UIView alloc ] initWithFrame:CGRectMake(0, -50, 290, 56)]; 
     detailView.userInteractionEnabled = YES; 
     detailView.superview = annotationView; 
     [detailView release]; 

     UIImageView *bg = [[UIImageView alloc ] initWithImage:[UIImage imageNamed:@"bulle_carte.png"]]; 

     [bg setFrame:CGRectMake(0, 0, 290, 56)]; 
     bg.superview = detailView; 

     [bg release]; 

     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [button setFrame:CGRectMake(250, 3, 35, 35)]; 

     [button setImage:[UIImage imageNamed:@"fleche_bleue_d.png"] forState:UIControlStateNormal]; 
     button.tag = [shopAnnotation.identifier intValue]; 
     [button addTarget:self action:@selector(btnDetailPressed:) forControlEvents:UIControlEventTouchUpInside]; 

     button.superview = detailView; 

     button.userInteractionEnabled = YES; 

     [annotationView setRightCalloutAccessoryView:detailView]; 

    } 


return annotationView; 
} 

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
NSLog(@"calloutAccessoryControlTapped"); 
} 

-(void)btnDetailPressed:(id)sender 
{ 
NSLog(@"btnDetailPressed"); 
} 

當我點擊按鈕或DetailView內部時,btnDetailPressed或calloutAccessoryControlTapped不會被調用/觸發。

有什麼建議嗎?

回答

2

使用MKMapViewDelegate的方法mapView:didSelectAnnotationView:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[YOUR_CUSTOM_CLASS class]]) { 
     //customize it 
    } 
} 

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    if ([view isKindOfClass:[YOUR_CUSTOM_CLASS class]]) { 
     //do something 
    } 
} 

Apple's doc