Ich entwickle App, wo Benutzer von GPS lokalisiert wird und dann gefragt wird, ob er an einem bestimmten Ort befindet. Um dies zu bestätigen, wird ihm sofort eine Callout-Blase präsentiert, die ihn fragt, ob er sich an einem bestimmten Ort befindet.Benutzerdefinierte MKAnnotation Callout Blase mit Button
Da es eine Menge von ähnlichen Fragen ist, ich war in der Lage kundenspezifische Hinweisblase zu tun:
Mein Problem: Taste ist nicht „klickbar“ Meine Vermutung: weil dieser Brauch callout höher ist als Standard Hinweisblase Ich musste es in einen negativen "Rahmen" stellen, daher kann der Knopf nicht angeklickt werden. Hier ist meine didSelectAnnotationView
Methode
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
if(![view.annotation isKindOfClass:[MKUserLocation class]]) {
CalloutView *calloutView = (CalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"callOutView" owner:self options:nil] objectAtIndex:0];
CGRect calloutViewFrame = calloutView.frame;
calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width/2 + 15, -calloutViewFrame.size.height);
calloutView.frame = calloutViewFrame;
[calloutView.calloutLabel setText:[(MyLocation*)[view annotation] title]];
[calloutView.btnYes addTarget:self
action:@selector(checkin)
forControlEvents:UIControlEventTouchUpInside];
calloutView.userInteractionEnabled = YES;
view.userInteractionEnabled = YES;
[view addSubview:calloutView];
}
}
CalloutView ist nur einfache Klasse mit 2 Eigenschaften (Label, Name des Ortes und der Taste zeigt) und mit xib.
Ich habe diese benutzerdefinierte Callout-Blase für ein paar Tage gemacht. Ich habe versucht, mit "asynchrone Lösungen" solution, aber ich konnte keine andere Art von Button und dann Offenlegung Schaltfläche hinzufügen.
Mein nächster Versuch war, etwas zu finden, das einfacher als asynchrone Lösungen war, und es zu meiner Verwendung zu modifizieren. So habe ich tochi's custom callout gefunden.
Auf der Grundlage seiner Arbeit, ich konnte seine Blase anpassen und Info-Taste für meine benutzerdefinierte Schaltfläche ändern. Mein Problem ist jedoch gleich geblieben. Um meine benutzerdefinierte Callout-Ansicht auf den Pin zu setzen, musste ich ihr einen negativen Frame geben, so dass meine Schaltfläche nur in den unteren 5 Pixeln "anklickbar" war. Es scheint, dass ich vielleicht tiefer in die Standard-Callout-Blase von ios eindringen, sie untergliedern und den Callout-Rahmen dort ändern muss. Aber ich bin jetzt wirklich hoffnungslos.
Wenn ihr mir den richtigen Weg zeigen könnt oder mir Ratschläge gibt, werde ich mich freuen.
Rob vielen Dank, Sie wirklich retter sind. Ich freue mich, Ihre Antwort zu verbessern und zu akzeptieren :) – Yanchi
Wenn ich nicht den Titel und den Untertitel in der "CustomAnnotation" -Klasse festlegen, wird Callout überhaupt nicht aufgerufen. Wie geht es weiter? – Satyam
@Satyamsvv Wenn Sie 'canShowCallout' auf' NO' setzen, wird der Aufruf Ihrer 'didSelectAnnotationView' nicht durch das Vorhandensein oder Fehlen von' title'/'subtitle' beeinflusst. – Rob