在MKMapView中为不同的注释设置不同的操作

时间:2013-04-26 01:02:45

标签: xcode annotations location mkmapview disclosure

我正在尝试找到一种方法来使多个注释公开按钮打开其他视图。 例如,annotation1公开按钮需要打开ViewController 1.xib,annotation2需要打开ViewController2.xib,依此类推。这可能吗?

到目前为止我已经有了这个代码,它根据坐标设置位置,并设置用户位置。

- (void)viewDidLoad
{
[super viewDidLoad];
_mapView.showsUserLocation = YES;
CLLocationCoordinate2D annotationCoord;

annotationCoord.latitude = 40.714353;
annotationCoord.longitude = -74.005973;
coord = 1;
MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = @"New York";
[_mapView addAnnotation:annotationPoint];

CLLocationCoordinate2D annotationCoord1;

annotationCoord1.latitude = 51.511214;
annotationCoord1.longitude = -0.119824;
coord = 2;
MKPointAnnotation *annotationPoint1 = [[MKPointAnnotation alloc] init];
annotationPoint1.coordinate = annotationCoord1;
annotationPoint1.title = @"London";
[_mapView addAnnotation:annotationPoint1];
}

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *mapPin = nil;
if(annotation != map.userLocation)
{
    static NSString *defaultPinID = @"defaultPin";
    mapPin = (MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if (mapPin == nil )
    {
        mapPin = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation
                                                  reuseIdentifier:defaultPinID] autorelease];
        mapPin.canShowCallout = YES;
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        mapPin.rightCalloutAccessoryView = infoButton;
    }
    else
        mapPin.annotation = annotation;

}
return mapPin;
}

我在这里放了什么:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
//   ???
}

感谢所有帮助。感谢

1 个答案:

答案 0 :(得分:1)

你可以这样做,

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
  if ([view.annotation.title isEqualToString:@"The titel of your annotation"]) 
  {
    // Do something
  }
}