2012-03-22 71 views
1

我在地圖視圖上有單個註釋。我可以通過編程選擇它,但是我點擊它沒有任何反應。你可以幫幫我嗎?有沒有人遇到類似的問題?這裏mehod用於建立anotations:無法選擇註釋?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation 
{ 
    MKAnnotationView *aView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"MapVC"]; 
    if (!aView) { 
     aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"MapVC"]; 
     aView.canShowCallout = YES; 
     aView.draggable=YES; 
     aView.leftCalloutAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
     // could put a rightCalloutAccessoryView here 
    } 
    aView.annotation = annotation; 
    [(UIImageView *)aView.leftCalloutAccessoryView setImage:nil]; 
    return aView; 
} 

並把它們添加到地圖視圖:

- (void)updateMapView 
{ 
    if (self.mapView.annotations) [self.mapView removeAnnotations:self.mapView.annotations]; 
    if (self.annotation) [self.mapView addAnnotation:self.annotation]; 
} 

而且mehod反應以按壓註解:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView 
{ 
    NSLog(@"did select annotation"); 
} 

順便說,方法[ self.mapView selectAnnotation:annotation]的作品,但沒有提出一個標註(我用斷點檢查它)。雖然只是記錄註釋不(通過斷點再次)。

+2

您可能希望包含一些視圖圖像,或者提供一些代碼以顯示設置方式。至少沒有更多的細節,很難弄清楚發生了什麼。 – dasblinkenlight 2012-03-22 12:00:26

+1

檢查地圖視圖的委託是否已設置,並且註釋的title屬性不是零或空白。 – Anna 2012-03-22 17:21:51

+0

title是definetly不是零,我不能檢查它是否爲空。順便說一句 - 拖動似乎並沒有工作太多,忘了提及我沒有作爲一個財產的頭銜,這只是我的電話中的一種方法。希望這會證明有用。 – 2012-03-22 18:09:39

回答

7

如果註釋的title爲零或空白,則標註將不會顯示(即使其他所有設置都已正確設置,包括canShowCallout)。

當您點擊註釋時,將會調用didSelectAnnotationView委託方法,如果註釋具有非空白title,將顯示標註。


關於在評論你的問題:

...是不是我有一個單獨的類來包裝我中,我 註釋類包含數據的類的實例的所有數據?

這沒什麼問題。
如果你想讓地圖相關的邏輯和基類保持分離,那很好,對於一個複雜的應用來說可能是個好主意,其中基礎數據類可能不僅僅用於註釋。

如果您的應用程序非常簡單並且數據僅用於註釋,則可以將事情保持簡單並將兩者結合使用,但這不是必需條件。

只要你堅持使用直接引用,而不是嘗試使用數組索引或視圖/按鈕標籤從註釋鏈接回某些數據對象,那麼「正確的」類實現取決於哪些工作可行爲您的應用程序。

3

嘗試將MKAnnotationView的canShowCallout屬性設置爲YES以防萬一您沒有。

+0

謝謝。我一直在嘗試各種各樣的東西,但我不知道這個屬性。它爲我做了詭計。 – 2014-01-06 04:42:50

+1

哇,真是太棒了! – 2017-03-02 16:42:43