2017-02-25 8 views
1

In meinem Xamarin.iOS Projekt ich meine eigenen Delegierten Klasse als Unterklasse von MKMapViewDelegate habeXamarin.iOS benutzerdefinierte Mapdelegate

Im Viewcontroller ich meine Delegierten als Delegierter des MapView.

public override async void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     mapView.delegate = new MyMapDelegate(this); 
    } 

Jetzt in meiner Delegiertenklasse füge ich einen Button für jeden Pin hinzu. Diese Schaltfläche zeichnet eine Überlagerung auf die Karte. Hier muss ich mapview.delegate = null setzen, sonst stürzt die App ab.

Aber wenn ich mapView.delegate = null setze, verwendet die App nicht die "DequeueReusableAnnotation" -Methode und natürlich wird die Anwendung DidUpdateUserLocation nicht mehr verwenden.

Der Fehler erhalte ich, wenn ich nicht mapviews Delegierten auf null gesetzt:

System.InvalidOperationException: Event-Registrierung wird das Überschreiben Delegierten. Entweder nur verwenden, um Ereignisse oder Ihre eigenen Delegierten: testApp.iOS.MyMapDelegate MapKit.MKMapView + _MKMapViewDelegate

Wie kann ich einen Delegierten in Xamarin?

EDIT

class MyMapDelegate: MKMapViewDelegate 
    { 
     ... some vars 

     public MyMapDelegate(MapController mapController) 
     { 
      this.mapController = mapController; 
     } 
     public override MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation) 
     { 
      //everything works fine here for AnnotationView 
      myBtn += (sender,e) => { 
       //mapView.Delegate = null; 
       userLocation = mapView.UserLocation.Coordinate 
       ... 
       mapView.OverlayRenderer = (mv,ol) => myLine; 
       mapView.AddOverlay(myWay.polyLine,MKOverlayLevel.AboveRoads) 
      }; 
     } 

Meine Vermutung ist vielleicht der Fehler erscheint, weil ich Methoden von mapView wie OverlayRenderer und Userlocation nennen?

+0

Können Sie den Code der 'MyMapDelegate' Klasse hinzufügen? Insbesondere der Ort, an dem Sie die Anmerkungen erstellen und zur Karte hinzufügen. – apineda

+0

Ich habe meine Frage @apineda bearbeitet – Korken55

Antwort

1

statt Aufruf:

mapview.OverlayRenderer = (mv,ol) => routeLine; 

ich die Methode außer Kraft zu setzen hatte:

public override MKOverlayRenderer OverlayRenderer(MKMapView mapView, IMKOverlay overlay) 
     { 
      var myPolyLine= new MKPolylineRenderer(myWay.Polyline) 
      { 
       LineWidth = 2.0f, 
       StrokeColor = UIColor.Yellow 
      }; 
      return myPolyLine; 
     }