如何知道MKPinAnnotationView引脚标注何时打开/关闭

时间:2010-05-27 11:40:21

标签: iphone annotations mkmapview

我想实时更新pin callout(弹出)字幕,当我从服务器收到一些新信息时,或者至少在callout打开时。到目前为止看起来pin + callout只在...创建一次

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

...然后按原样使用,只要它存在,无论我多少次点击它关闭/打开或滚动保持它可见。 如何更新字幕?

2 个答案:

答案 0 :(得分:0)

我无法完全回答,因为我从来不需要这样做,但this bit of documentation看起来像是正确方向的指针。

当新的响应从服务器进入并且MapView应该自行更新时,尝试更新subititle对象的<MKAnnotation>属性?

如果没有,请尝试在信息更改时删除并重新添加注释?

答案 1 :(得分:0)

edit ::使用键值观察有一个更好的解决方案,包括将观察者添加到selected的{​​{1}}属性,然后在回调中正确处理它:

MKAnnotationView

您可以在此处查看解决方案:http://blog.evandavey.com/2009/07/how-to-detect-when-mkannotation-mkannotationview-is-selected.html


(旧解决方案)

我有类似的问题。看起来你已经掌握了大部分内容。在你的功能中:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

确保为每个注释添加回调(aka。选择器)。对我来说,我实际上想要- (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; 变量的任何委托中创建了一个名为showDetails的函数(在我的情况下是self,这是一个自定义addTarget)。

现在,每当有人点击任何注释时,都会调用UIViewController函数。

但是,我在确定调用哪个特定注释时遇到问题,因为我在地图上有很多注释,而showDetails函数的调用者不是注释,而是特定的{{1} }。

我已经研究过这个解决方案:Clean solution to know which MKAnnotation has been tapped?,但它只处理showDetails内的事件,正如您所提到的,只会在创建每个注释时调用,而不是在他们被窃听了。