Hello and thanks for the help.
I am using the following code to set the pin colors on my MapView annotations ?
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
if (!pinView) {
//////////////
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
pinView.pinColor = MKPinAnnotationColorGreen;
if([[annotation title] isEqualToString:@"MuRoom"])
{
// Do somethingMKAnnotation
pinView.pinColor = MKPinAnnotationColorRed;
NSLog( @"data from ann index %@", annTile);
}
if([[annotation title] isEqualToString:@"Mike's"])
{
// Do somethingMKAnnotation
pinView.pinColor = MKPinAnnotationColorRed;
NSLog( @"data from ann index %@", annTile);
}
if([[annotation title] isEqualToString:@"Bill's"])
{
// Do somethingMKAnnotation
pinView.pinColor = MKPinAnnotationColorPurple;
NSLog( @"data from ann index %@", annTile);
}
if([[annotation title] isEqualToString:@"Steve's"])
{
// Do somethingMKAnnotation
pinView.pinColor = MKPinAnnotationColorGreen;
NSLog( @"data from ann index %@", annTile);
}
if([[annotation title] isEqualToString:@"Louisa's"])
{
// Do somethingMKAnnotation
pinView.pinColor = MKPinAnnotationColorGreen;
NSLog( @"data from ann index %@", annTile);
}
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = rightButton;
} else {
pinView.annotation = annotation;
}
return pinView;
}
I am then using the function below to filter my pins locaions
-(void)FilterAddAll:(id)sender
{
[mapview removeAnnotations:annoArra];
[mapview removeAnnotations:annoArrayVenue];
[mapview removeAnnotations:artArray];
// CLLocationCoordinate2D center = mapview.centerCoordinate;
// mapview.centerCoordinate = center;
[mapview addAnnotations:annoArra];
[mapview addAnnotations:annoArrayVenue];
[mapview addAnnotations:artArray];
}
-(void)FilterArt:(id)sender
{
[mapview removeAnnotations:annoArra];
[mapview removeAnnotations:artArray];
[mapview removeAnnotations:annoArrayVenue];
[mapview addAnnotations:annoArra];
}
-(void)FilterVenue:(id)sender
{
[mapview removeAnnotations:annoArra];
[mapview removeAnnotations:artArray];
[mapview removeAnnotations:annoArrayVenue];
[mapview addAnnotations:artArray];
}
The Question: How do I get the pin colors to retain their original color ? After I filter they come back as random pin colors.
Thanks again.
This occurs because you’re not using the “reuseIdentifier” properly. When you get back a pin from dequeueReusableAnnotationViewWithIdentifier:@”pinView”, you need to either:
always set the pin color, OR
use a different reuseIdentifier for each colored pin
i.e. you might be getting a reusable view with a red pin, and you want to display a blue pin
example: