2013-05-26 65 views
4

我在MKMapView上使用MKPinAnnotationView,標題和副標題通常顯示爲,但rightCalloutAccessoryView未顯示。rightCalloutAccessoryView未在MKPinAnnotationView上顯示

我試了google很多,但無法顯示它呢。我的代碼如下。

- (void)addAnnotation 
{ 
    CLLocationCoordinate2D theCoordinate = self.location.coordinate; 

    MapAnnotation *annotation = [[MapAnnotation alloc] initWithCoordinate:theCoordinate]; 
    annotation.title = @"Pin"; 
    annotation.subtitle = @"More information"; 

    [self.mapView addAnnotation:annotation]; 
} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
    if ([annotation isKindOfClass:[MapAnnotation class]]) { 
     static NSString *reuseIdentifier = @"MyMKPinAnnotationView"; 
     MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:reuseIdentifier]; 

     if (!annotationView) { 
      annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; 
      annotationView.pinColor = MKPinAnnotationColorRed; 
      annotationView.enabled = YES; 
      annotationView.canShowCallout = YES; 
      annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     } else { 
      annotationView.annotation = annotation; 
     } 
    } 

    return nil; 
} 

注意,標題&字幕可以顯示。

在此先感謝。

+3

您的'viewForAnnotation'沒有返回'annotationView'。所以一定要返回它(如果它返回'nil',默認行爲將發生,無論你的所有工作如何)。看到我修改後的答案。 – Rob

回答

7

查看標題和副標題是標註視圖的默認行爲。如果您想做其他任何事情(例如rightCalloutAccessorView),則必須確保通過設置MKMapViewdelegate來調用viewForAnnotation,並確保您的viewForAnnotation正在返回您創建的annotationView

一兩個問題發生:

  1. viewForAnnotation在所有情況下都返回nil。確保你在創建/修改後返回annotationView

  2. 如果您的地圖視圖的delegate尚未設置,您當前的viewForAnnotation根本不會被調用。

    確保您已設置delegate。您可以以編程方式做到這一點:

    self.mapView.delegate = self; 
    

    或者你也可以在IB做到這一點(通過選擇連接檢查,右面板的最右邊的選項卡和控制 -drag從delegate到現場的狀態欄):

    enter image description here

    如果是這樣的話,如果你把你的viewForAnnotation一個NSLog語句或斷點。如果delegate未正確設置,您可能根本看不到它被調用。

+1

謝謝! OMG ...昨晚我很困。 –