Domanda

I can drop pin annotations onto a map which has a disclosure button. When that button is clicked an alertView pops up in which I can remove the selected annotation. I am now trying the edit the selected annotation subtitle with UIAlertViewStylePlainTextInput. Any ideas on how I can do this?

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    NSLog(@"Annotation button clicked");
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Annotation" message:@"Edit Subtitle" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:@"Update Subtitle", @"Remove Pin",nil];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    [alert show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 0) {
        NSLog(@"Hide button clicked");
    }
    if (buttonIndex == 1) {
        NSLog(@"Update button clicked");
        //e.g. subtitle.text = [[alertView textFieldAtIndex:0] text];
    }
    if (buttonIndex == 2) {
        NSLog(@"Remove button clicked");
        [self.map removeAnnotations:self.map.selectedAnnotations];
    }
}
È stato utile?

Soluzione

Just like when removing the annotation, you can use the map view's selectedAnnotations property to get access to the selected annotation to update its subtitle.

The following example assumes you're using the annotation class MKPointAnnotation (which has a settable subtitle property) for your annotations but you can replace it with your class as needed:

NSLog(@"Update button clicked");

//e.g. subtitle.text = [[alertView textFieldAtIndex:0] text];

//Make sure there is a selected annotation...
if (self.map.selectedAnnotations.count > 0)
{
    //Since only one annotation can be selected at a time,
    //the selected annotation is the one at index 0...
    id<MKAnnotation> ann = [self.map.selectedAnnotations objectAtIndex:0];

    //Make sure the selected annotation is one of our types...
    if ([ann isKindOfClass:[MKPointAnnotation class]])
    {
        MKPointAnnotation *pa = (MKPointAnnotation *)ann;
        pa.subtitle = [[alertView textFieldAtIndex:0] text];
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top