2016-09-20 4 views
2

Ich habe eine App, die Karten auf mehreren verschiedenen Bildschirmen verwendet. Alle Karten sollten die gleichen grundlegenden Informationen (Anmerkungen und Überlagerungen) anzeigen, aber jede Instanz fügt der Karte verschiedene zusätzliche Anmerkungen und Überlagerungen hinzu. Ich möchte eine Klasse erstellen, die die gemeinsamen Features implementiert und sich genau wie die MKMapView verhält. Wie ist das möglich?So erstellen Sie eine erweiterte MKMapView

Ich hatte drei Ideen, um dies zu lösen, aber keine von ihnen scheint eine gute Lösung zu sein.

  1. Unterklasse MKMapView. Das Problem bei diesem Ansatz ist, dass die Karte die Informationen über ihre Anmerkungen und Überlagerungen von ihrem Delegaten erhält, was die Unterklasse (eine Ansicht ...) selbst sein sollte, daher ist das Hinzufügen zusätzlicher Daten problematisch (ich kann den Delegaten nicht anders einstellen) als die Klasse selbst).

  2. Wrap MKMapView. Ich könnte eine NSObject/UIView Unterklasse mit einem MKMapView erstellen, aber entweder muss ich alle Methoden der Karte zu meiner Klasse Proxy oder Zugriff auf die Karte mit einer Kenntnis der inneren Objekte (myMapView.mapView.xxx ...).

  3. Erstellen Sie eine Delegate-Klasse (NSObject mit MKMapViewDelegate Funktionen). Die Delegate-Klasse könnte dann das allgemeine Verhalten implementieren. Diese Lösung hat ähnliche Probleme wie die erste.

Wie kann ich das elegant lösen?

Antwort

0

Erstellen Sie eine Klasse und fügen Sie Karte zur Ansicht dieser Klasse hinzu. Machen Sie diese Klasse nun als übergeordnete Klasse für alle Klassen, denen Sie Mapview hinzufügen möchten. Geben Sie Daten zur übergeordneten Klasse an, wenn Sie Anmerkungen und Überlagerungen hinzufügen möchten.

+0

Auf diese Weise sollte ich jede MKMapView-Funktionalität implementieren und weitergeben, wenn ich Sie richtig verstehe. – gklka

+0

Sie müssen MKMapView-Methoden nur in der übergeordneten Klasse implementieren. Geben Sie dann Daten für Annotationen und Overlays für die Elternklasse über die Unterklasse ein und implementieren Sie die Methode zum Hinzufügen der Annotation in der Elternklasse, die Sie von der Kindklasse aufrufen müssen. Auf diese Weise erstellt es neue Instanzen von mapview in jedem Controller, den Sie hinzugefügt haben, und Sie müssen MKMapView-Methoden in keiner Klasse implementieren – vivek

+0

@gklka überprüfen Sie bitte meinen Kommentar – vivek

Verwandte Themen