2012-12-03 14 views
5

Harita ek açıklamalarımda, simgelerin her aksesuar görünümünde bir UIButton var. - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control yönteminde, her bir olayın üstesinden gelmek için hangi aksesuar görünümüne dokunulduğunu nasıl anlarım? Aksine ayarlanması ve etiketlerini kullanarak daha control sol veya sağ aksesuar görünümü iseiOS hangi belirtme çizgisi aksesuarı arasında bağlantı kurduğunu ayırt eder

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

.. isnt hangi uibuttonun takıldığını bilmek yeterli mi? – poncha

+0

bir nedenden dolayı çalışmıyor. Nedenini bilmiyorum –

cevap

18

, sadece kontrol edebilir: İşte benim kod etiketleri önceden kullandığınız

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

Mükemmel. Teşekkürler –

İlgili konular