2013-12-14 2 views
2

У меня есть один UIViewcontroller с MKMapKit и PickerView. Как показано ниже. UIViewcontroller и у меня есть один plist, который содержит все координаты, соответствующие значениям в PickerView. Так как я выбираю любой элемент из PickerView, я обновляю текущую Карту и беру координаты нового элемента (иногда это может быть от 5 до 6 координаты) и показать это на карте.Обновление аннотаций MKMapkitview не работает?

Но для меня я вижу, что «Аннотации» подходят для отображения карты, но когда я нажимаю другой элемент, предыдущие контакты все еще присутствуют на Карте.

Я хочу показать только аннотаций штырьки выбранного PickerView item.please помочь мне

использования: это мой PLIST файл enter image description here

В моем PLIST там один поле «категория» предметы перечисленные в Pickerview, являются общим списком категорий.

Поэтому, когда я просматриваю PickerView, я проверю, соответствует ли выбранный элемент любому элементу в поле категории Plist. Если его сопоставление соответствует их координатам в виде карты.

Но когда я нажимаю категорию «restuarents» в PickerView, я получил следующую карту, которая верна.

enter image description here

и когда я нажимаю «cluburi» категорию его должен показать 2 Pins на карте вместо 3.Actually его не клиринговых текущий «restuarent» Pin от карты .like ниже изображений enter image description here

Итак, как очистить предыдущие контакты на карте перед отображением новых контактов?

Это мой код в файле 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; 
} 
+1

Итак, если я понял ваше требование, вы хотите, чтобы на карте отображался только выбранный элемент из режима выбора. Если это так, вам нужно удалить существующий вывод из подпунктов Mapview. У меня есть рабочий код, просто дайте момент мне, чтобы поместить это здесь. –

+0

Хорошо, это будет здорово !!, я попробовал этот removeAnnotation код, как только я добавил, что тогда карта всегда кажется пустой .. thatats yi removed.can u дать ваш пример кода – Bangalore

ответ

1

Так что в моем приложении, я сделал пользовательский класс, унаследованный от MKAnnotationView в btMapAnnotation. Вы должны выполнить этот вызов в тот момент, когда в элементе управления выбирается любой объект.

for (NSObject *a in [mapView annotations]) { 
    if ([a isKindOfClass:[btMapAnnotation class]]) { 
     btMapAnnotation *annotation = (btMapAnnotation *)a; 
     [mapView removeAnnotation:annotation]; 
    } 
} 

Как только этот вызов будет выполнен, добавьте только свою новую аннотацию к своей карте.

+0

, который вы имеете в виду в методе didselect pickerview – Bangalore

+1

Да, как только элемент выбора выбирается, вышеуказанный код попытается найти аннотацию, если она есть, и удалите ее. После этого ваш код следует добавить новую аннотацию с выбранными координатами из вашего файла plist. –

+0

большой !! работает..!!!!! спасибо alot – Bangalore

Смежные вопросы