2012-12-03 14 views
5

W moich adnotacjach na mapie mam UIButton jako widok każdego akcesorium w objaśnieniach. W metodzie - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control, jak dowiedzieć się, który widok akcesoriów został dotknięty, aby obsłużyć każde zdarzenie? Oto mój kod:System iOS rozróżnia, który dodatek objaśniający jest używany

-(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

w kodzie używasz już znaczniki .. isnt tyle, żeby wiedzieć, który uibutton został dotknięty? – poncha

+0

to nie działa z jakiegoś powodu. Nie wiem dlaczego! –

Odpowiedz

18

Zamiast ustawiania i za pomocą tagów, można po prostu sprawdzić, czy control jest lewy lub prawy widok akcesorium:

if (control == view.leftCalloutAccessoryView) { 
    //handle left control tap...   
} 
else 
if (control == view.rightCalloutAccessoryView) { 
    //handle right control tap...  
} 
+0

Idealny. Dzięki –

Powiązane problemy