0

Я внедрил infoWindow для отображения данных моих нескольких маркеров. Но все, что я могу отображать, - это то же самое, что и все информационные окна.Несколько информационных окон, показывающих один и тот же текст в iOS

Как показать данные, связанные с этим маркером, чтобы повторения не было?

Вот мой код:

 for (int i = 0 ; i < jsonDataDict.count; i ++) { 
     NSDictionary *newDict = [jsonDataDict objectAtIndex:i ]; 

     double latitude = [[newDict valueForKey:@"lat"]doubleValue]; 
     double longitute = [[newDict valueForKey:@"lng"]doubleValue]; 


     nameStr = [newDict valueForKey:@"name"]; 


     countJson = i ; 

     CLLocationCoordinate2D position = CLLocationCoordinate2DMake(latitude, longitute); 
     GMSMarker *marker = [GMSMarker markerWithPosition:position]; 
     marker.title = [newDict valueForKey:@"name"]; 
     // marker.icon = [UIImage imageNamed:@"pin11.png"]; 
     marker.icon = [self image:[UIImage imageNamed:@"pinPopoye.png"] scaledToSize:CGSizeMake(75.0f, 60.0f)]; 
     marker.appearAnimation = kGMSMarkerAnimationPop; 
     marker.infoWindowAnchor = CGPointMake(1.1, 0.70); 
     marker.map = self.mapView; 
     [self mapView:self.mapView markerInfoWindow:marker]; 


    } 
} 

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker 
{ UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 25)]; 
    customView.backgroundColor = [UIColor colorWithRed:71.0/255.0 green:65.0/255.0 blue:65.0/255.0 alpha:0.8]; 
    customView.layer.cornerRadius = 5; 
    customView.layer.masksToBounds = YES; 

    // Orange Color ==== [UIColor colorWithRed:254.0/255.0 green:165.0/255.0 blue:4.0/255.0 alpha:0.5]; 
     UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 60, 10)]; 
    nameLabel.text = nameStr; 
    nameLabel.textColor = [UIColor whiteColor]; 
    nameLabel.textAlignment = NSTextAlignmentCenter; 
    nameLabel.font = [UIFont systemFontOfSize:8.0]; 
    [customView addSubview:nameLabel]; 

     return customView; 
} 

ответ

2

Заменить это заявление:

nameLabel.text = nameStr; 

с:

nameLabel.text = marker.title; 

Проблема в том, вы используете общий NSString, nameStr, который перезаписывается на каждой итерации вашего цикла for. Таким образом, все метки имеют одинаковое строковое значение, когда они окончательно отображаются. Вы также можете сделать:

nameLabel.text = [nameStr copy]; 

и она должна работать - но я думаю, что с помощью nameStr в код был только остаток некоторых предыдущих «взломать».

+0

спасибо .... !!! –

+0

[имяStr копия] делаем. Разница пожалуйста. –