2010-05-27 58 views
0

我想要實時更新引腳標註(彈出)字幕,當我從服務器接收一些新信息時,或者至少在標註打開時。到目前爲止,它看起來像針+標註在創建只有一次......如何知道MKPinAnnotationView引腳標註何時打開/關閉

- (MKAnnotationView *)mapView:(MKMapView *)aMapView 
     viewForAnnotation:(id <MKAnnotation>)annotation 

...然後原樣使用,只要它有多少次點擊它關閉/打開或滾動周圍存在無關保持可見。 如何更新字幕?

回答

0

我不能完全回答我從來沒有需要這樣做,但this bit of documentation看起來像一個正確的方向指針。

嘗試更新您的<MKAnnotation>對象的subititle屬性,當服務器發出新的響應並且MapView應該自動更新?

如果不是,請嘗試在信息更改時刪除並重新添加註釋?

+0

引腳是用於搜索結果,所以有很多。從服務器更新只是爲這些結果提供了一些實時信息。不知道如何識別另一個......但關於KVO的提示看起來很有希望! – JOM 2010-05-27 12:08:28

+0

看起來你將不得不存儲哪個MKAnnotation屬於哪個服務器的結果 - 可能是某種NSDictionary?讓我知道你如何繼續 - 我對你如何解決這個問題真的很感興趣! – deanWombourne 2010-05-27 12:17:37

+0

Thanx,你讓我正確的方向:)還沒有完全解決,但以某種方式工作,當我總是更新字幕在viewForAnnotation。此示例代碼很有用http://developer.apple.com/iphone/library/samplecode/MapCallouts/Introduction/Intro.html – JOM 2010-05-27 12:31:43

0

編輯::有一個更好的解決方案使用鍵 - 值觀察,其中包括添加的觀察員MKAnnotationViewselected屬性,那麼與它打交道適當回調:

- (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事件,正如你提到的,只被調用在創建每個註釋,而不是當他們敲擊交易。

相關問題