2011-10-05 17 views
1

沒有顯示對於一些奇怪的原因的詳細按鈕以某種方式停止顯示:DetailDisclosure按鈕在註解視圖

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

     /* add detail button */ 
     NSLog(@"Here"); 

     UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     pinAnnotation.rightCalloutAccessoryView = infoButton; 


    } 

} 

return pinAnnotation; 
} 

這裏是輸出。 在此先感謝。

回答

3

第一個問題是pinAnnotation在該方法中聲明瞭兩次。

一旦在if(annotation != mapView.userLocation)...塊的第一行和第二行。因此,return語句返回nil,因爲外部變量從未設置(導致沒有附件的默認MKAnnotationView標註)。

將第二個聲明更改爲只是一個賦值。

接下來的問題是,您需要將canShowCallout設置爲YES,因爲對於MKPinAnnotationView,默認值爲NO。您可以在設置附件視圖後執行此操作:

pinAnnotation.canShowCallout = YES; 

以上應修復附件按鈕不顯示。


無關,但你還需要設置視圖的annotation財產時,它被重新使用(在當它不是離隊後無)。所以在if (pinAnnotation == nil)中加else塊:

else { 
    //annotation view being re-used, set annotation to current... 
    pinAnnotation.annotation = annotation; 
}