2010-07-12 98 views
2

如何在像蘋果地圖應用程序那樣的userLocation(藍點)標註中顯示DisclosureButton?如何將Button添加到userLocation標註?

現在我只是可以更改它的標題和副標題,但我希望提供自定義標註視圖。因此,如果我點擊藍色圓點,除了標題和副標題外,它還可以顯示一個按鈕。這樣,當我點擊按鈕時,它可以引導我到另一個視圖。 當註釋== self.mapView.userLocation時,我在viewForAnnotation中返回了MKAnnotationView。但是,標註可以顯示更新後的標題和副標題,但無法顯示我添加的按鈕。

我真的需要這個功能,我希望有任何幫助和建議!

回答

2

對於annotationView,設置

myAnnotationView.canShowCallout=YES; 

然後加起來兩個按鈕與

myAnnotationView.leftCalloutAccessoryView=myLeftButton; 

myAnnotationView.rightCalloutAccessoryView=myRightButton; 

的按鈕可以是一個正常的按鈕,自定義按鈕,或預定義的類型之一。像這樣:

myAnnotationView.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

然後添加calloutAccessoryControlTapped:方法來處理水龍頭。

+0

謝謝Henrik,我一直在尋找這個解決方案好幾個小時。 – daidai 2010-08-18 05:49:22

+2

你怎麼能得到MKUserLocation的註解視圖的句柄? – mjisrawi 2011-08-08 02:37:06

+0

@mjisrawi你可以在 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(CarAnnotation *)註解。你必須檢查註釋是否是藍點,如下所示:if([annotation isKindOfClass:[MKUserLocation class]]) – 2011-10-17 11:38:35

1

也許很晚。 這裏是解決方案。您實現UIMapViewDelegete方法如下:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 
    if ([view.annotation isKindOfClass:[MKUserLocation class]] && !view.rightCalloutAccessoryView) { 
     view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 

    } 
} 
+0

如果每次選擇註釋視圖時添加按鈕,是不是有點開銷?另外,您會看到附件按鈕在註釋視圖之後稍微出現。有沒有辦法阻止這種情況發生? – jowie 2011-09-02 14:53:47

+0

- 關於開銷問題,可以在'if'子句中檢查accessoryView的存在,也可以使用NSAutoreleasePool技術來解決它。放置語句'NSAutorelease * pool = [[NSAutorelease alloc] init];'在函數的第一行,以及函數 的最後一行的'[pool release]' - 關於動畫,無法解析 – 2011-10-11 09:17:10

10

我已經試過camdaochemgio的解決方案,但它僅適用於第二次敲擊。這是一個永遠有效的解決方案:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    for (MKAnnotationView* view in views) 
    { 
     if ([view.annotation isKindOfClass:[MKUserLocation class]]) 
     { 
      view.rightCalloutAccessoryView=[UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     } 
    } 
}