我应该使用MKAnnotation,MKAnnotationView还是MKPinAnnotation?

我打电话给Web服务,并绘制一个MapView上的一些对象。

我不明白的是我应该使用MKAnnotationPoint还是MkAnnotationView? 我不确定。 当我使用MKAnnotation时,地图上显示的针脚,如果我点击他们,他们会显示标题和副标题。

如果我使用MKAnnotationView,引脚出现,但是当我点击它们时,什么都不会发生。

我也试图添加正确的button标注/雪佛龙看button,但还没有能够弄清楚。

这是我的代码的一个例子。

MKPointAnnotation mk = new MKPointAnnotation(); MKAnnotationView mkView = new MKAnnotationView(); mk.Coordinate = coord; mk.Title = tl.Name; mk.Subtitle = DateTime.Now.ToShortDateString(); mkView.Annotation = mk; mapView.AddAnnotationObject(mkView); 

所以,如果我做了上述 – 针脚出现,但我不能点击其中任何一个。

如果我只是使用:

 mapView.AddAnotationObject(mk); //not using the MkAnnotationView 

然后他们都出现,可点击。 我不知道如何添加rightcalloutbutton他们呢。 所以这是问题的第二部分。

谢谢。

我没有使用MonoTouch,但底层的SDK使用是相同的iOS我相信。

MKAnnotation是基于您的注释数据模型的协议/接口。 如果您需要的只是titlesubtitlecoordinate ,您也可以为注释数据模型对象使用预定义的MKPointAnnotation类(实现MKAnnotation接口),而不是创build自定义类。

MKAnnotationView是注解的视图应该如何显示,并在地图视图的viewForAnnotation委托方法(未创build内联)中设置。 注释视图可以在具有相同外观的多个注释对象(例如针图像)之间重复使用。 所以从理论上说,一个MKAnnotationView实例可能用于实现MKAnnotation多个注解对象(假设它们并不全部在屏幕上)。

所以你创build一个基于MKAnnotation的对象,并在addAnnotation (即AddAnnotationObject )调用中传递它。 然后在viewForAnnotation委托方法中,创build并返回一个基于MKAnnotationView的对象的实例。

“MKPinAnnotation”(实际上是MKPinAnnotationView )是MKPinAnnotationView的一个预先定义的子类,它提供了一个默认的PIN图像。 您可以在viewForAnnotation委托方法中返回MKPinAnnotationView的实例,而不是devise自定义视图。

您将创build正确的标注附件button的位置在viewForAnnotation委托方法中。 您创build一个types为UIButtonUIButtonTypeDetailDisclosure ,并将其设置为注释视图的rightCalloutAccessoryView

buttonbutton将在地图视图的calloutAccessoryControlTapped委托方法中处理,该委托方法提供对注释视图的注释以及注释的引用。

给出的方法名称是iOS中的名称,但是MonoTouch中的名称应该类似。