2009-10-21 39 views
18

Tôi đang sử dụng một số MKMapView chứa một số MKAnnotation chân.
Phía trên bản đồ Tôi đang hiển thị số UITableView với thông tin chi tiết về các chân MKAnnotation.MKMapView: Nhận sự kiện được nhấp vào ghim chú thích

Vấn đề của tôi: Khi tôi chọn một ghim, tôi muốn chọn ô bảng tương ứng. Đối với điều này, tôi muốn bắt một sự kiện/đại biểu nếu pin được chọn. Tôi không nói về việc gọi phụ kiện chú thích

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

Trả lời

1

Tôi chưa thấy cách đơn giản để thực hiện việc này trong MapKit. Không có số mapView:annotationWasTapped: trên đại biểu.

Một cách để làm là cung cấp lớp con xem chú thích của riêng bạn. Chế độ xem chú thích tùy chỉnh có thể nắm bắt lựa chọn ghim theo số setSelected:animated: hoặc trong trình xử lý sự kiện cấp thấp hơn và chuyển thông tin đó lên bộ điều khiển chế độ xem của bạn.

+0

Ồ, âm thanh tốt và có vẻ không hoạt động nhiều! Cảm ơn bạn! – squeezer123

+0

Đây là cách tôi đã làm nó là tốt. Kỳ lạ là Apple không cung cấp bất kỳ cuộc gọi lại nào cho rằng:/ – yonel

3

bạn có thể sử dụng một Observer cho Selected-Sự kiện:

[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

Chỉ cần một bản cập nhật này - trong iOS 4 có những phương pháp MKMapViewDelegate có thể được sử dụng để theo dõi lựa chọn chú thích và bỏ chọn:

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

Nếu bạn muốn biết liệu người dùng có đang nhấp vào chú thích được mở rộng/đã chọn hay không, bạn có thể kiểm tra view.selected == YES trong didSelectAnnotationView – nylund

Các vấn đề liên quan