2010-03-10 6 views
12

Ist es möglich, gleichzeitig mehrere Callouts zu öffnen?Mehrere Anmerkungen Callouts in MKMapView

Der Code:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView { 
    for (id<MKAnnotation> currentAnnotation in theMapView.annotations) { 
     [theMapView selectAnnotation:currentAnnotation animated:YES]; 
    } 
} 

öffnet nur eine Legende.

+0

Warum mehr als 1? Die Bildschirmgröße ist nicht groß genug und dies verwirrt den Benutzer. – kennytm

+2

Das ist richtig, aber wenn es nur zwei-drei Pins auf der Karte mit genügend großen Abstand zwischen ihnen gibt - wäre der Benutzer nicht verwirrt. Und ja, das ist die Anforderung meines Kunden. – Ievgen

Antwort

7

Aus einer strengen API-Perspektive scheint dies nicht möglich.

Der -(void)setSelected:(BOOL)selected animated:(BOOL)animated Wähler auf MKAnnotationView heißt es: „. Sie sollten diese Methode nicht direkt aufrufen Ein MKMapView Objekt ruft diese Methode als Reaktion auf Benutzer-Interaktionen mit der Anmerkung“, so die zugrunde liegende Botschaft ist, dass die Auswahl der AnnotationView Instanzen in unter der vollen Verantwortung der Benutzerauswahl, und da der Benutzer nur eine von ihnen auf einmal auswählen kann, sollten Sie nicht in der Lage sein, mehrere von ihnen gleichzeitig ausgewählt zu bekommen.

Auch wenn die Dokumentation besagt, dass diese Methode nicht direkt aufgerufen werden sollte, haben Sie versucht, sie trotzdem mit setSelected:YES auf mehreren MKAnnotationView Instanzen aufzurufen, um zu sehen, was es gibt?

SAUBER Weg, um die ich es tun würde: (nicht ich jedoch getestet)

  • nicht auf dem Selektionsmechanismus der die MKAnnotationView MKMapView
  • Unterklasse verlassen, um eine Gewohnheit zu implementieren einem
  • tun die Anpassung in einer Weise, dass das Callout Teil der Anmerkungsansicht ist, so dass Sie mehrere davon anzeigen können.

Wenn Sie es so tun, können Sie mehrere Hinweisblase zur gleichen Zeit und bekommen etwas, das aussehen würde erscheinen lassen:

alt text http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg

+0

Vielen Dank für Ihre Antwort. Ja, du hast Recht, das könnte funktionieren. – Ievgen

+0

hast du es geschafft zu arbeiten? –

9

Hinweis, dass es ein Verfahren auf MKMapView (nicht MKAnnotationView) für programmatisch eine Anmerkung auswählen, die mehr oder weniger funktioniert, wie man es erwarten würde:

- (void)selectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated 

jedoch automatisch abgewählt jeder Zur gleichen Zeit annotation, so dass dies Ihr Problem nicht löst.

Merkwürdig ist, gibt es eine Eigenschaft auf MKMapView, die ein Array von aktuell ausgewählten Anmerkungen zu halten erscheint:

@property(nonatomic, copy) NSArray *selectedAnnotations 

Aber die Dokumentation zu dieser Methode sagt:

„ein neues Array zuweisen zu Diese Eigenschaft wählt nur die erste Annotation im Array aus. "

Nur gedacht, das könnte von Interesse sein.

+0

Leider, aber wahr, ab 2013 und iOS 6.1 ist es immer noch wie Sie beschreiben. – Klaas

Verwandte Themen