2014-10-29 242 views
6

我正在構建一個使用內置地圖視圖的IOS應用程序。我成功地放置自定義註釋,等等。但是,我遇到了一個按鈕時調用的委託函數的問題(mapView:didSelectAnnotationView)。mapView:didSelectAnnotationView:無法正常工作。

第一次按下注釋時,函數被正確調用。但是,如果我繼續再次單擊相同的註釋,則該函數不會觸發。如果在這一點上單擊不同的註釋,該函數將會觸發,但如果再次單擊該註釋,該函數將不會觸發。基本上,我無法連續兩次點擊相同的註釋。委託功能只會在第一次被調用。有沒有人遇到過這個問題?特別是有什麼地方我應該尋找錯誤?

+0

我有同樣的問題,但有一個區別,即。當自定義annotationview出現在mapview的邊框上時,我遇到了問題。 – 2017-01-31 12:18:31

回答

4

那麼,當您考慮它時,您已經選擇了該註釋視圖。委託人告訴你,如果已經選擇了該引腳,則沒有任何意義。

一個簡單的修復可能是將註釋設置爲在委託調用中取消選擇。這應該讓你再次接到電話。

[annotation setSelected:NO animated:NO]; 

這裏有你需要調用的方法。 https://developer.apple.com/library/ios/documentation/mapkit/reference/MKAnnotationView_Class/index.html#//apple_ref/occ/instm/MKAnnotationView/setSelected:animated

+0

對我不起作用 – 2017-01-31 12:37:24

+0

什麼不適合你?你還在使用Objective-C嗎?這個答案是非常古老的,所以在這段時間內它可能已經過時了。 – Bergasms 2017-02-06 03:22:17

5

朋友提出了一個想法,它證明是正確的。 didSelectAnnotationView觸發時,它實際上將註釋標記爲選中某個方式。然後,當您再次單擊它時,代理功能不會觸發,因爲它已被選中。一旦完成了所需的任務,您必須通過調用以下函數來手動取消註釋。

[mapView deselectAnnotation:view.annotation animated:false]; 
1
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView 
    { 
     indexPathTag=aView.tag; 
     [mapView deselectAnnotation:aView.annotation animated:YES]; 

    } 
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)aView 
    { 
    } 

我希望這會爲你工作:) 我都面臨着同樣的問題,該代碼爲我工作。