如何显示不同的markerInfoWindow?

我正在使用GMS的ios。 和我面临的问题,我无法检测到哪个标记点击(自定义markerInfoWindow)

你可以看到我的代码自定义markerInfoWindow:

我在这里创build标记:

-(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_; }} 

这里是代表:

 -(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; } 

那么如何才能检测到刚刚点击哪个对象呢?

谢谢。

好的,您的CreateMarks方法是正确的,唯一缺less的是确定标记的方法。 添加到它:

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

现在,在你的mapView:markerInfoWindow: 这个循环没有意义。 相反,做这样的事情:

 -(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; } 

问题是你可能不明白这个方法是如何工作的。 每次用户点击标记时都会调用它。 实际上, What view should I show when this marker is tapped 。 而且你只是在所有的标记上运行,并在相同的视图上覆盖他们的数据。

现在, GMSMarker的这个很酷的属性userData可以存储任何你喜欢的东西。 稍后识别标记是有用的。