2009-10-21 65 views
18

我使用的MKMapView包含一對MKAnnotation針腳。
在地圖上方顯示UITableView,其中包含MKAnnotation引腳的詳細信息。MKMapView:獲得註釋針上的單擊事件

我的問題:當我選擇一個針,我想選擇相應的表格單元格。 爲此,如果選中此引腳,我想要捕獲事件/代理。我不是在說呼叫標註附件

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

回答

1

我還沒有看到在MapKit中做到這一點的簡單方法。代表上沒有mapView:annotationWasTapped:

做到這一點的一種方法是提供您自己的註釋視圖子類。自定義註釋視圖可以捕獲在setSelected:animated:或更低級別的事件處理程序中的引腳選擇,並將該信息傳遞給您的視圖控制器。

+0

哦,聽起來不錯,似乎沒有太多的工作! 謝謝! – squeezer123 2009-10-22 12:21:36

+0

這也是我這樣做的方式。奇怪的是,蘋果公司沒有提供任何回調:/ – yonel 2010-01-20 15:05:23

3

你可以使用一個觀測器的選擇 - 事件:

[pin addObserver:self 
     forKeyPath:@"selected" 
     options:NSKeyValueObservingOptionNew 
     context:@"ANSELECTED"]; 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 

    NSString *action = (NSString*)context; 

    if([action isEqualToString:@"ANSELECTED"]){ 

     BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue]; 
     if (annotationAppeared) { 
      // clicked on an Annotation 
     } 
     else { 
      // Annotation disselected 
     } 
    } 
} 
42

只是一個更新到這一點 - 在iOS 4的存在是可以用來跟蹤註釋選擇和MKMapViewDelegate方法取消選擇:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
+4

如果你想知道用戶是否點擊擴展/選定的註釋,你可以檢查view.selected == YES didSelectAnnotationView – nylund 2012-07-02 11:33:14