简体   繁体   中英

how to show different markerInfoWindow?

i'm using GMS for ios. and i'm facing problem that i can't detect which marker did tapped!(Custom markerInfoWindow)

you can see my code for custom markerInfoWindow :

here i'm creating the markers :

 -(void)CreateMarks{
for (int l=0 ; l<self.NSMuatableArray.count; l++) {
    CLLocationCoordinate2D pos = CLLocationCoordinate2DMake([[[self.NSMuatableArray objectAtIndex:l] objectForKey:@"lati"] doubleValue],[[[self.NSMuatableArray objectAtIndex:l] objectForKey:@"longi"] doubleValue]);
    GMSMarker *marker = [[GMSMarker alloc]init];
    marker.position=pos;
    marker.draggable = NO;
    marker.map = mapView_;
}}

here is the delegate :

-(UIView*)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker{

CustomInfoWindow*infoW = [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];

for (l=0; l<self.NSMuatableArray.count; l++) {

    infoW.Title.text =[[self.NSMuatableArray objectAtIndex:l ]objectForKey:@"Title"] ;
    infoW.Time.text = [[self.NSMuatableArray objectAtIndex:l ]objectForKey:@"Time"] ;

}



return infoW;
}

so how can detect which object just tapped ?

thanks.

Ok, your CreateMarks method is correct, the only thing missing, is some way to identify the marker afterwards. Add this to it:

marker.userData = [self.NSMuatableArray objectAtIndex:l];

Now, on your mapView:markerInfoWindow: . This loop doesn't make sense. Instead, do something like this:

-(UIView*)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker{

    CustomInfoWindow*infoW = [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];

    NSDictionary * data = (NSDictionary*)marker.userData;

    infoW.Title.text =[data objectForKey:@"Title"];
    infoW.Time.text = [data objectForKey:@"Time"];

    return infoW;
}

The problem is that you probably didn't understand how this method really work. It is called every time the user taps on a marker. It is actually asking What view should I show when this marker is tapped . And you were simply running over all your markers and overwriting their data on the same view.

Now, GMSMarker 's have this cool property userData that can store whatever you like. It is useful to identify the marker later.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM