0

在我的项目中,我用这些信息填充我的地图

for  (int i = 0; i<arrayResults.count; i++){

        object = [arrayResults objectAtIndex:i];

        if ([[object iden]intValue] == 1) {

            type = @"type_one";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 2) {

          type = @"type_two";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 3) {

            type = @"type_three";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 4) {

            type = @"type_four";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

这些是我在地图上添加的四种对象

当我进入这个方法时

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    MKAnnotationView *view = nil;
    if (annotation != mapView.userLocation) {

            if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 1){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_one"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_one"];
                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_one.png"];
                }

            }

            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 2){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_two"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_two"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_two.png"];
                }
            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 3){


                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_three"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_three"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_three.png"];
                }

            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 4){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_four"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_four"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(openScheda:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                  view.image = [UIImage imageNamed:@"type_four.png"];

                }
            }
countPoint++;
}

问题是标记类型与数组元素不对应......但我不明白。也就是说,如果标记具有图像“type_one”,则在弹出窗口中显示 type_four 的“标题”......它不对应

4

1 回答 1

3

您的注释需要“知道”它是什么类型,以便您可以在 viewForAnnotation 中创建正确类型的视图。通过继承 MKPointAnnotation 来做到这一点,向它添加一个 NSInteger 值来存储数组索引。

请参阅MKPointAnnotation 添加额外属性,但您将添加一个名为 index 的 NSInteger 属性。

创建注释时,设置此属性:

for  (int i = 0; i<arrayResults.count; i++)
{
    object = [arrayResults objectAtIndex:i];

    CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

    // MKMyPointAnnotation is your MKPointAnnotation subclass
    MKMyPointAnnotation *annotationPoint = [[MKMyPointAnnotation alloc] init];
    annotationPoint.coordinate = annotationCoord;
    annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
    annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];

    annotationPoint.index = i;                                // store the index

    [map addAnnotation:annotationPoint];
}

然后在您的 viewForAnnotation 中,将注释转换为您的子类,然后取消引用类型:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
{
 MKMyPointAnnotation *myAnnotation = (MKMyPointAnnotation *)annotation;
 object = [arrayResults objectAtIndex:myAnnotation.index];      // <-- your index property

 switch ([[object iden] intValue])
 {
  case 1:                                 // type one
    .
    .
    .

 }

.
.
.
}
于 2013-12-31T15:03:24.133 回答