繁体   English   中英

如何显示不同的markerInfoWindow?

[英]how to show different markerInfoWindow?

我在iOS上使用GMS。 而且我遇到的问题是我无法检测到哪个标记被窃听了(自定义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;
}

那么如何才能检测到刚刚窃听的对象呢?

谢谢。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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