我想实时更新pin callout(弹出)字幕,当我从服务器收到一些新信息时,或者至少在callout打开时。到目前为止看起来pin + callout只在...创建一次
- (MKAnnotationView *)mapView:(MKMapView *)aMapView
viewForAnnotation:(id <MKAnnotation>)annotation
...然后按原样使用,只要它存在,无论我多少次点击它关闭/打开或滚动保持它可见。 如何更新字幕?
答案 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
内的事件,正如您所提到的,只会在创建每个注释时调用,而不是在他们被窃听了。