Edit annotation text with an UIAlertViewStylePlainTextInput

孤街浪徒 提交于 2019-12-24 11:43:51

问题


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];
    }
}

回答1:


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];
    }
}


来源:https://stackoverflow.com/questions/20775282/edit-annotation-text-with-an-uialertviewstyleplaintextinput

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!