2012-12-03 7 views
5

マップアノテーションでは、コールアウトの各アクセサリビューとしてUIButtonがあります。 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)controlメソッドでは、どのアクセサリビューが各イベントを処理するためにどのように操作されたのか把握するにはどうすればよいですか?ここに私のコードだ:iOSでタップされたコールアウトアクセサリを区別する

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

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

MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"current"]; 

UIButton *calloutButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
UIButton *directionsButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
directionsButton.frame = CGRectMake(0, 0, 23, 23); 
[directionsButton setBackgroundImage:[UIImage imageNamed:@"directions.png"] forState:UIControlStateNormal]; 

MyPin.leftCalloutAccessoryView = directionsButton; 
MyPin.rightCalloutAccessoryView = calloutButton; 
MyPin.draggable = NO; 
MyPin.highlighted = NO; 
MyPin.animatesDrop= YES; 
MyPin.canShowCallout = YES; 
MyPin.pinColor = MKPinAnnotationColorRed; 

return MyPin; 
} 

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

Annotation *ann = view.annotation; 

if ([control tag] == 1) { 

    CLLocationCoordinate2D currentCoords = {ann.coordinate.latitude, ann.coordinate.longitude}; 

    MKPlacemark *place = [[MKPlacemark alloc] initWithCoordinate: currentCoords addressDictionary:nil]; 
    MKMapItem *destination = [[MKMapItem alloc] initWithPlacemark: place]; 
    destination.name = ann.title; 
    destination.url = [NSURL URLWithString:@"http://www.wccca.com/PITS"]; 
    NSArray *items = [[NSArray alloc] initWithObjects: destination, nil]; 
    NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys: 
          MKLaunchOptionsDirectionsModeDriving, 
          MKLaunchOptionsDirectionsModeKey, nil]; 
    [MKMapItem openMapsWithItems: items launchOptions: options]; 

} 

if ([control tag] == 2) { 

    MKCoordinateRegion region; 
    region.center.latitude = ann.coordinate.latitude; 
    region.center.longitude = ann.coordinate.longitude; 
    region.span.latitudeDelta = 0.02; 
    region.span.longitudeDelta = 0.02; 

    [self.mapView setRegion:region animated:YES]; 
} 

} 
+0

...ありえませんどちらのuibuttonがタップされたかを知るには十分ですか? – poncha

+0

何らかの理由で動作していません。どうしてか分かりません! –

答えて

18

ではなく、タグを設定して使用してcontrolが左または右補図であるならば、あなただけチェックすることができ:

すでにタグを使用しているあなたのコード内の
if (control == view.leftCalloutAccessoryView) { 
    //handle left control tap...   
} 
else 
if (control == view.rightCalloutAccessoryView) { 
    //handle right control tap...  
} 
+0

パーフェクト。ありがとう –

関連する問題