我正在使用Xmarin创建带有自定义注释的地图,并且由于某种原因,一旦点击注释,就不会调用DidSelectAnnotationView方法。
以下是我创建注释的方法:
public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, MonoTouch.Foundation.NSObject annotation)
{
var item = annotation as MKPointAnnotation;
if (item == null)
{
return null;
}
if (_idToAnotations.ContainsKey (item.Title))
{
return _idToAnotations [item.Title];
}
UIView view = null;
MKAnnotationView viewAnnotation = new MKAnnotationView ();
Branch branch = _displayedBranches [item.Title];
view = CreateMapAnnotation (branch.Name);
viewAnnotation.Add (view);
viewAnnotation.CanShowCallout = false;
return viewAnnotation;
}
以下是我如何创建放置在MKAnnotationView中的视图:
static UIView CreateMapAnnotation (string title)
{
UIView view = new UIView (new RectangleF (0, 0, 60, 68));
UILabel text = new UILabel (new RectangleF (1, 0, 60, 15));
text.Text = title;
text.Font = text.Font.WithSize (12f);
text.TextColor = UIColor.White;
text.BackgroundColor = UIColor.Black;
text.Layer.CornerRadius = 6;
text.TextAlignment = UITextAlignment.Center;
view.Add (text);
UIImageView image = new UIImageView (new RectangleF (0, 17, 60, 40));
image.Image = new UIImage ("map_pin_red.png");
view.Add (image);
return view;
}
任何想法?
答案 0 :(得分:1)
我believe只会为具有DidSelectAnnotationView
属性值和Title
= true的MKAnnotationView调用CanShowCallout
。如果您无法进行这些更改,那么您可能需要实现自己的点击事件处理程序。
还有什么理由你没有使用MKAnnotationView的正确构造函数和注释对象以及重用标识符,还调用DequeueReusableAnnotation方法(参见Xamarin docs)?这是注释视图的大多数使用的最佳实践。
答案 1 :(得分:0)
您必须通过调用
取消选择点击的注释func mapView(_ mapView: MKMapView, didDeselectAnnotationView view: MKAnnotationView)
以便下次点击即可访问。