2014-09-03 47 views
1

到目前爲止,我已經找到了一個已經可見標註泡沫更新文本的唯一方法是再次取消其註釋,然後選擇它,像這樣:如何在不取消選擇註釋的情況下更新標註視圖?

id <MKAnnotation> annotation = self.selectedAnnotation; // Keep a reference 
[self.mapView deselectAnnotation:self.selectedAnnotation animated:NO]; 
[self.mapView selectAnnotation:annotation animated:NO]; 

然而這種方法,會引起一些我的應用程序中不需要的副作用。

有沒有人知道有任何其他方式來實現這一目標?

+0

你的意思是標準的標註視圖,顯示標題和副標題?你如何更新代碼中的標題和副標題?如果您使用標準屬性設置器更新文本(例如'ann.title = @「changed」;'),則應該更新標註,而不必取消選擇+選擇。 – Anna 2014-09-03 12:02:00

+0

是的,我使用標準的屬性設置器(儘管間接地,因爲標題和副標題是隻讀的),但是在我定義自己的方法中,所以我猜想取消選擇+選擇技巧通過調用一些重新創建大喊。你知道哪種方法可能嗎? – CodeMonkey 2014-09-03 14:34:22

+2

如果您使用setter直接設置標題和副標題,則標註將自動更新,因爲地圖視圖通過KVO觀察更改。如果無法直接更新,則需要在更改之前/之後手動調用willChangeValueForKey和didChangeValueForKey(而不是取消選擇+ select)。請參閱http://stackoverflow.com/questions/5705678/iphone-updating-annotation-subtitle-in-mapkit。 – Anna 2014-09-03 14:44:06

回答

3

安娜提供了一個在我的問題的意見完美的解決方案!

通過顯式通知文本更改的MKMapView(它監聽KVO的更改),我設法讓標註更新,否則它不會。這裏的工作代碼:

[annotation willChangeValueForKey:@"subtitle"]; 
annotation.subTitle = @"New subtitle"; 
// subTitle is the property behind MKAnnotation's subtitle 
[annotation didChangeValueForKey:@"subtitle"]; 

謝謝你安娜來到救援=)

相關問題