2010-01-14 22 views
5

Tengo un MKMapView implementado con estas líneas de código fuente (mi ubicación es una bala azul, los otros de uno son pasadores de color púrpura):MKMapView -> mostrar un botón para mi ubicación

- (MKAnnotationView *)mapView:(MKMapView *)mapViewLocal viewForAnnotation:(id <MKAnnotation>)annotation { 
    if (annotation == mapViewLocal.userLocation) { 
     mapViewLocal.userLocation.title = @"Test"; 
     [mapViewLocal setRegion:MKCoordinateRegionMakeWithDistance(mapViewLocal.userLocation.coordinate, 1000, 1000) animated:YES]; 
     return nil; 
    } 

    MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapViewLocal dequeueReusableAnnotationViewWithIdentifier:@"Pin"]; 
     if(pinView == nil) { 
      pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"] autorelease]; 
      pinView.pinColor = MKPinAnnotationColorPurple; 
      pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      pinView.animatesDrop = NO; 
      pinView.canShowCallout = YES; 
     } else { 
      pinView.annotation = annotation; 
     } 
     return pinView; 
    } 

Los pasadores de Purple un botón de divulgación de detalles, pero mi anotación no tiene uno. ¿Cómo puedo configurar ese botón?

Y ese es el método en el que puedo hacer algo un botón se pressd:

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

¿Cómo podría diferenciar entre mi ubicación y todos los demás de uno, porque necesito un manejo diferente. ¿Hay otro delegado o tengo que hacer algún tipo de cláusula if?

Respuesta

4

en su didUpdateToLocation escribir algo como

AddressAnnotation *myAnnotation = [[AddressAnnotation alloc] initWithCoordinate:currentLocation]; 
       myAnnotation.title = @"You are here"; 
       [self.mapView addAnnotation:myAnnotation]; 

Y Luego

algo como

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
      // try to dequeue an existing pin view first 
     static NSString* annotationIdentifier = @"annotationIdentifier"; 

     NSString *titlestr = annotation.title; 

     MKPinAnnotationView* pinView = (MKPinAnnotationView *) 
     [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier]; 
    MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc] 
              initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; 
     if (!pinView) 
     { 
      // if an existing pin view was not available, create one 
      // MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc] 
                //initWithAnnotation:annotation reuseIdentifier:annotationIdentifier] autorelease]; 
      if([titlestr isEqualToString:@"You are here"]) 
      { 
       customPinView.pinColor = MKPinAnnotationColorGreen; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;"); 
      } 
      else{ 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       customPinView.selected = TRUE; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;"); 
       UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
       [rightButton addTarget:self 
           action:@selector(ShowStoreDetail:) 
         forControlEvents:UIControlEventTouchUpInside]; 
       customPinView.rightCalloutAccessoryView = rightButton; 
      } 
      customPinView.animatesDrop = YES; 
      customPinView.canShowCallout = YES; 

      return customPinView; 
     } 
     else 
     { 
      pinView.annotation = annotation; 



      if([titlestr isEqualToString:@"You are here"]) 
      { 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorGreen;"); 
      } 
      else{ 
       customPinView.pinColor = MKPinAnnotationColorPurple; 
       customPinView.selected = TRUE; 
       NSLog(@"customPinView.pinColor = MKPinAnnotationColorPurple;"); 
       UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
       [rightButton addTarget:self 
           action:@selector(ShowStoreDetail:) 
         forControlEvents:UIControlEventTouchUpInside]; 
       customPinView.rightCalloutAccessoryView = rightButton; 
      } 


     } 
     return pinView; 

    return nil; 
} 
Cuestiones relacionadas