編輯::有一個更好的解決方案使用鍵 - 值觀察,其中包括添加的觀察員MKAnnotationView
的selected
屬性,那麼與它打交道適當回調:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
您可以查看這裏的解決方案:http://blog.evandavey.com/2009/07/how-to-detect-when-mkannotation-mkannotationview-is-selected.html
(老辦法)
我也有類似的問題。看起來你已經掌握了大部分。在你的函數:
- (MKAnnotationView *)mapView:(MKMapView *)aMapView
viewForAnnotation:(id <MKAnnotation>)annotation
只要確保回調添加到每個註釋(又名選擇)。對我而言,我實際上想要他們點擊一個UIButton
,所以我創建了一個並將其添加爲註釋的rightCalloutAccessoryView
。
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;
然後我(在我的自我,這是一個自定義UIViewController
)創建了一個名爲showDetails
在功能上你傳遞給addTarget
變量任何委託。
現在,只要有人點擊任何註釋,showDetails
函數就會被調用。
但是,我在確定要調用哪個特定註釋時遇到問題,因爲我在地圖上有許多標註,並且showDetails
函數的調用方不是註釋,而是特定的UIButton
。
我看着這個解決方案:Clean solution to know which MKAnnotation has been tapped?,但它僅與內部viewForAnnotation
事件,正如你提到的,只被調用在創建每個註釋,而不是當他們敲擊交易。
來源
2010-06-10 18:02:52
Jon
引腳是用於搜索結果,所以有很多。從服務器更新只是爲這些結果提供了一些實時信息。不知道如何識別另一個......但關於KVO的提示看起來很有希望! – JOM 2010-05-27 12:08:28
看起來你將不得不存儲哪個MKAnnotation屬於哪個服務器的結果 - 可能是某種NSDictionary?讓我知道你如何繼續 - 我對你如何解決這個問題真的很感興趣! – deanWombourne 2010-05-27 12:17:37
Thanx,你讓我正確的方向:)還沒有完全解決,但以某種方式工作,當我總是更新字幕在viewForAnnotation。此示例代碼很有用http://developer.apple.com/iphone/library/samplecode/MapCallouts/Introduction/Intro.html – JOM 2010-05-27 12:31:43