如何显示不同的markerInfoWindow?

时间:2014-05-30 22:24:18

标签: ios google-maps-markers gmsmapview

我正在使用GMS for ios。并且我面临的问题是我无法检测到哪个标记被点击了!(Custom markerInfoWindow)

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

我在这里创建标记:

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

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

感谢。

1 个答案:

答案 0 :(得分:4)

好的,你的CreateMarks方法是正确的,唯一缺少的是,之后可以通过某种方式识别标记。添加它:

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,可以存储你喜欢的任何内容。稍后识别标记很有用。