我有一个带有MKMapKit和PickerView.Like的UIViewcontroller,如下图所示。 我有一个plist,其中包含与PickerView中的值对应的所有坐标。因此,一旦我从PickerView中选择任何项目,我将刷新当前地图并获取新项目的坐标(有时可能是5到6个坐标)并在地图中显示。
但对我来说,我可以看到“注释”即将来到地图视图,但是当我点击另一个项目时,之前的引脚仍然在地图中。
我想只显示所选PickerView项目的注释引脚。请帮助我
使用案例: 这是我的plist文件
在我的plist中有一个名为“categories”的字段Pickerview中列出的项目是总类别列表。
因此,当我滚动浏览PickerView时,我将检查所选项目是否与Plist类别字段中的任何项目匹配。如果匹配的iam在地图视图中显示其坐标。
但是当我点击PickerView中的“restuarents”类别时,我得到了以下正确的地图。
当我点击“cluburi”类别时,它应该在地图中显示2个Pins而不是3.实际上它不会从地图中清除当前的“restuarent”Pin。如下图
那么在显示新Pins之前如何清除地图中的先前Pins?
这是我在viewcontroller.m文件中的代码
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [locations count];
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [locations objectAtIndex: row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
[_MAPVIEW setRegion:[_MAPVIEW region] animated:YES];
for(int j=0;j<[[savedContentsarray valueForKey:@"category"] count];j++)
{
if([[[savedContentsarray valueForKey:@"category"] objectAtIndex:j] isEqualToString:[locations objectAtIndex: row]])
{
coordinate.latitude=[[latitude objectAtIndex:j] floatValue];
coordinate.longitude=[[longitude objectAtIndex:j] floatValue];
annotation = [[myAnnotation alloc] initWithCoordinate:coordinate title:[[savedContentsarray valueForKey:@"name"]objectAtIndex:j]];
[_MAPVIEW addAnnotation:annotation];
}
}
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {
//7
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
//8
static NSString *identifier = @"myAnnotation";
MKPinAnnotationView * annotationView = (MKPinAnnotationView*)[_MAPVIEW dequeueReusableAnnotationViewWithIdentifier:identifier];
if (!annotationView)
{
//9
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
annotationView.pinColor = MKPinAnnotationColorPurple;
annotationView.animatesDrop = YES;
annotationView.canShowCallout = YES;
}else {
annotationView.annotation = annotation;
}
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
return annotationView;
}
答案 0 :(得分:1)
因此,在我的应用中,我创建了一个自定义类,继承自MKAnnotationView
btMapAnnotation
。您必须在选择器控件中选择任何对象时进行此调用。
for (NSObject *a in [mapView annotations]) {
if ([a isKindOfClass:[btMapAnnotation class]]) {
btMapAnnotation *annotation = (btMapAnnotation *)a;
[mapView removeAnnotation:annotation];
}
}
完成此调用后,只需将新注释添加到地图中。