单击pin注释时显示另一个视图

时间:2014-01-04 13:34:43

标签: objective-c mkmapview mapkit mkpointannotation

我有很多车库,需要在地图上显示多个车库。

以下是我用于Map以显示多个引脚的代码。

CLLocationCoordinate2D annotationCoord;
for (NSMutableDictionary* aDict in Gfeeds) {
    annotationCoord.latitude = [aDict[@"GLatitude"] floatValue];
    annotationCoord.longitude = [aDict[@"GLongitude"] floatValue];

    MKPointAnnotation *annotationPoint2 = [[MKPointAnnotation alloc] init];
    annotationPoint2.coordinate = annotationCoord;
    annotationPoint2.title = [NSString stringWithFormat:@"%@", aDict[@"GName"]];
    annotationPoint2.subtitle = aDict[@"GId"];

    [geomapView addAnnotation:annotationPoint2];

}

现在我想要的是在点击地图引脚后显示车库的详细信息...我正在下面做。

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

    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != geomapView.userLocation)
    {
        static NSString *defaultPinID = @"myPin";
        pinAnnotation = (MKPinAnnotationView *)[geomapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinAnnotation.canShowCallout = YES;

        //instatiate a detail-disclosure button and set it to appear on right side of annotation
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinAnnotation.rightCalloutAccessoryView = infoButton;

    }

    return pinAnnotation;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    GarageDetailsViewController *secondView = [self.storyboard instantiateViewControllerWithIdentifier:@"GarageDetails"];

    secondView.garageMainId = view.annotation.subtitle;

    [self.navigationController pushViewController:secondView animated:YES];
}

使用这种方式我可以去GarageDetails,但是我冒的风险是显示副标题中的车库ID。我想隐藏这个副标题,以便不会显示Id。

知道我该怎么办?

  1. 隐藏字幕
  2. OR

    1. 从地图...
    2. 将ID传递给GarageDetails

1 个答案:

答案 0 :(得分:1)

为什么不将“MKPointAnnotation”子类化(您可以将其命名为“FahimPointAnnotation”),在此子类中,您可以添加“garageID”属性。

然后您可以将注释添加到地图中,当它被点击时,您可以检索注释并将“MKPointAnnotation”转换回“FahimPointAnnotation”并从中获取您的garageID (无需担心它出现在注释视图的字幕字段中)。