没有调用DidSelectAnnotationView

时间:2014-01-21 16:08:32

标签: xamarin.ios mkmapview xamarin

我正在使用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;
        }

任何想法?

2 个答案:

答案 0 :(得分:1)

believe只会为具有DidSelectAnnotationView属性值和Title = true的MKAnnotationView调用CanShowCallout。如果您无法进行这些更改,那么您可能需要实现自己的点击事件处理程序。

还有什么理由你没有使用MKAnnotationView的正确构造函数和注释对象以及重用标识符,还调用DequeueReusableAnnotation方法(参见Xamarin docs)?这是注释视图的大多数使用的最佳实践。

答案 1 :(得分:0)

您必须通过调用

取消选择点击的注释
func mapView(_ mapView: MKMapView, didDeselectAnnotationView view: MKAnnotationView)

以便下次点击即可访问。