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

时间:2011-10-28 22:46:51

标签: c# ios xamarin.ios mapkit

我正在调用Web服务并在MapView上绘制一些对象。

我无法理解的是我应该使用MKAnnotationPoint还是MkAnnotationView?我不确定。当我使用MKAnnotation时,引脚会显示在地图上,如果我点击它们,它们会显示标题和副标题。

如果我使用MKAnnotationView,则会显示引脚,但是当我点击它们时,没有任何反应。

我也试图添加右按钮标注/雪佛龙看按钮,但也无法解决这个问题。

以下是我的代码示例。

    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。所以这是问题的第二部分。

感谢。

1 个答案:

答案 0 :(得分:12)

我没有使用过MonoTouch,但我认为底层的SDK使用与iOS相同。

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

coordinate是注释的视图应该如何显示,并在地图视图的MKAnnotationView委托方法中设置(不是内联创建的)。注释视图可以在具有相同外观的多个注释对象(例如图钉图像)之间重复使用。因此理论上,单个viewForAnnotation实例可能会用于实现MKAnnotationView的多个注释对象(假设它们不是一次出现在屏幕上)。

因此,您创建一个基于MKAnnotation的对象,并在MKAnnotation(即。addAnnotation)调用中传递该对象。然后在AddAnnotationObject委托方法中,创建并返回基于viewForAnnotation的对象的实例。

“MKPinAnnotation”(实际上是MKAnnotationView)是MKPinAnnotationView的预定义子类,它提供默认的图钉图像。您可以在MKAnnotationView委托方法中返回MKPinAnnotationView的实例,而不是设计自定义视图。

您要在viewForAnnotation委托方法中创建正确的标注附件按钮的位置。您创建viewForAnnotation类型UIButton,并将其设置为注释视图的UIButtonTypeDetailDisclosure

按钮按下将在地图视图的rightCalloutAccessoryView委托方法中处理,该方法提供对标注视图和标注所在的注释的引用。

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