我正在调用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。所以这是问题的第二部分。
感谢。
答案 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中的名称应该类似。