2014-09-03 30 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"]; 

谢谢你安娜来到救援=)

相关问题