2012-11-12 24 views
5

Tôi có ứng dụng iOS có chú thích tùy chỉnh.Nhấn vào một MKAnnotationView để bỏ chọn và ẩn chú thích của nó

  1. Tôi muốn để có thể khai thác một MKAnnotationView một lần để hiển thị nó callout (hoạt động tốt)
  2. và sau đó tôi muốn để khai thác MKAnnotationView một lần thứ hai để bỏ chọn các chú thích và ẩn chú thích cho rằng chú thích (hoạt động trong iOS5 nhưng không phải iOS6).

Tôi hiểu rằng didSelectAnnotationView chỉ được yêu cầu được gọi cho lựa chọn đầu tiên của chú thích. ([1]: Selecting a MapView Annotation Twice ), và dựa trên bài viết này và những bài tôi đã đọc ([2]: ios mapkit closing annotation callouts by tapping the map), có vẻ như phát hiện bất kỳ lần nhấn bổ sung nào trên MKAnnotationView sau khi được chọn yêu cầu UITapGestureRecognizer. Vì vậy, tôi đang sử dụng UITapGestureRecognizer và tôi phát hiện đúng các nút bổ sung trên chế độ xem chú thích của mình khi chúng đã được chọn và tôi đang gọi deselectAnnotation khi tôi nhận ra nhấn và tôi đang ẩn/bỏ chọn chú thích/chú thích tương ứng. Nó hoạt động tốt trong iOS5, nhưng nó chỉ hoạt động một nửa trong iOS6

Trong iOS6 trình nhận dạng cử chỉ nhấn được gọi, và tôi gọi mã của tôi để ẩn chú thích và bỏ chọn chú thích và mọi thứ vẫn ổn, nhưng sau đó chọn phương thức selectAnnotationView được gọi bằng cách nào đó và do đó chú thích của tôi hiển thị lại và chú thích của tôi được chọn lại. Điều tôi cho rằng sẽ xảy ra là ngay sau khi tôi bỏ chọn chế độ xem chú thích trong công cụ nhận dạng cử chỉ của tôi, sự kiện nhấn vẫn hoạt động, mapView phát hiện sự kiện chạm và gọi selectAnnotationView, và vì vậy chú thích rằng tôi chỉ không được chọn hiện đang được chọn lại.

Tôi không biết tại sao nó chỉ xảy ra trong iOS6, nhưng tôi hy vọng đầu vào vào bất kỳ ý tưởng nào khác để xử lý hành vi mong muốn của tôi.

+0

bạn có thể hiển thị mã? – james075

Trả lời

0

Tôi không biết nếu bạn vẫn gặp sự cố (tôi hy vọng không phải vì bài đăng của bạn hơi cũ). Nhưng trong trường hợp một số người có cùng một vấn đề, một giải pháp để bỏ chọn chú thích và tránh mapKit chọn lại nó là thêm một chút chậm trễ trước khi bỏ chọn chú thích.

- (void)annotationTap:(UIGestureRecognizer *)gesture 
{ 
    MKAnnotationView *mkav = (MKAnnotationView *)gesture.view; 
    //Add a small delay to deselect 
    [self performSelector:@selector(deselectAnnotation:) withObject:mkav.annotation afterDelay:0.3]; 
    [gesture.view removeGestureRecognizer:gesture]; 
} 


- (void)deselectAnnotation:(id<MKAnnotation>)annotation 
{ 
    [self.mapView deselectAnnotation:annotation animated:YES]; 
} 

Và trong trường hợp người sử dụng bỏ chọn chú thích trên bản đồ tap donMt giả mạo để loại bỏ các cử chỉ với mã này

- (void) mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view { 
     for (UIGestureRecognizer *recognizer in view.gestureRecognizers) { 
      [view removeGestureRecognizer:recognizer]; 
     } 
} 
Các vấn đề liên quan