我有一个UIAlertView,在用户想要删除RegionAnnotation时显示为确认。
我无法弄清楚如何访问调用UIAlertView的RegionAnnotationView,以便删除RegionAnnotation。
这是我破碎的代码 - 你可以看到我正在尝试将AlertView的superview转换为RegionAnnotationView(这是个坏主意)。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex==0)
{
NSLog(@"alertView.superview is a %@",alertView.superview);
RegionAnnotationView *regionView = (RegionAnnotationView *)alertView.superview;
RegionAnnotation *regionAnnotation = (RegionAnnotation *)regionView.annotation;
[self.locationManager stopMonitoringForRegion:regionAnnotation.region];
[regionView removeRadiusOverlay];
[self.mapView removeAnnotation:regionAnnotation];
}
}
答案 0 :(得分:1)
由于在用户删除注释之前选择了注释,因此您可以从地图视图的selectedAnnotations
属性中获取对注释的引用。
在警报视图委托方法中,您可以执行以下操作:
if (mapView.selectedAnnotations.count == 0)
{
//shouldn't happen but just in case
}
else
{
//since only one annotation can be selected at a time,
//the one selected is at index 0...
RegionAnnotation *regionAnnotation
= [mapView.selectedAnnotations objectAtIndex:0];
//do something with the annotation...
}
如果没有选择注释,另一个简单的替代方法是使用ivar来保存对需要删除的注释的引用。
MSK评论的另一个选项是使用objc_setAssociatedObject。
无论如何,使用superview假设视图层次结构是某种方式并不是一个好主意。