将特定注释的数据带到下一个视图

时间:2013-10-24 05:41:09

标签: ios map annotations

我需要将从webService获取的自定义图像设置为mapPins。为此,我在方法中编写特定代码

   - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    NSLog(@"viewForAnnotation Method");

    if([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    NSString *annotationIdentifier = @"CustomViewAnnotation";
    MKAnnotationView* annotationView = [objMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
    if(!annotationView)
    {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                      reuseIdentifier:annotationIdentifier];
    }

    //annotationView.canShowCallout= YES;


    NSLog(@"Annotation Index = %lu",(unsigned long)[mapView.annotations indexOfObject:annotation]);
    Annotations *myCustomPinAnnot = (Annotations*)annotation;
    NSLog(@"Selected title = %@",myCustomPinAnnot.title);

    if ([myCustomPinAnnot.title isEqualToString:@" TOWER PLACE"]) {
        arrayFromArray = [[NSMutableArray alloc] init];

        NSString *eff0 = [[allDataArray objectAtIndex:0] pinEfficiencyObjectClass];
        NSString *eff1 = [[allDataArray objectAtIndex:1] pinEfficiencyObjectClass];
        NSString *eff2 = [[allDataArray objectAtIndex:2] pinEfficiencyObjectClass];
        NSString *eff3 = [[allDataArray objectAtIndex:3] pinEfficiencyObjectClass];

        [self calculateEfficiency:eff0 andSecondEff:eff1 andThirdEff:eff2 andFourthEff:eff3];

        [arrayFromArray addObject:[allDataArray objectAtIndex:2]];
        [arrayFromArray addObject:[allDataArray objectAtIndex:1]];
        [arrayFromArray addObject:[allDataArray objectAtIndex:0]];
        [arrayFromArray addObject:[allDataArray objectAtIndex:3]];

        joinString=[NSString stringWithFormat:@"%@%@%@",@"mais_",[self getColourCode:eff0 andSecondEff:eff1      andThirdEff:eff2 andFourthEff:eff3],@".png"];

        NSLog(@"Join String = %@",joinString); //JoinString is the image fetched from web service
        UIImageView *imgV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:joinString]];
        [imgV setFrame:CGRectMake(0, 0, 40, 40)];

        annotationView.image = imgV.image;

    }
return annotationView;

}

我得到了4个相应图像的引脚。

现在,当我点击特定的图钉时,我能够将数据带到下一个视图,但图像不同。 也就是说,如果我点击标题为“abc”的图钉,我会在下一个屏幕上成功显示标题。 但如果引脚上的图像是红色,则下一个视图上的图像是不同的。

在下一个视图中,只有第一个和最后一个图钉的图像正确显示。

第二个它给了我第一个图像,第三个图像给了我最后一个图像的图像。

怪异。

my didSelectAnnotationCode。

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {

    Annotations *annView = view.annotation; 
    NSLog(@"Pin title in callout = %@",annView.pinTitle);
    objOnClickPinView = [[onClickPinView alloc]initWithNibName:@"onClickPinView" bundle:nil];

    objOnClickPinView.pinTitleString = annView.pinTitle;

    [self presentViewController:objOnClickPinView animated:YES completion:nil];

}

注意:我不需要显示calloutView。我需要直接点击mapPin。

1 个答案:

答案 0 :(得分:2)

我收到了错误。 我发布这个答案只是因为如果在不久的将来你有人可能面临同样的愚蠢问题。

我传递给下一个视图的连接字符串被其前一个视图覆盖,因此它包含虚拟数据。 我通过在

中添加相同的代码来解决这个问题
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {

并使用

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

编译器将如何知道哪个引脚被点击。

因此我使用了4个不同的joinStrings而不是1个,并且在检查didSelect中的条件时

if ([annView.title isEqualToString:@"xyz"]) {
        objOnClickPinView.getColorCode = joinString1;
    }

else if...