Tengo una vista de mapa que estoy agregando y eliminando annotations
basado en un interruptor en un popovercontroller
. Cuando toco fuera del popover
, se cierra correctamente y llama al delegate
método popoverControllerDidDismissPopover:
El problema que tengo es que cuando activo el interruptor en el popover
(tocando dentro de la vista de popover), si elimino el annotations
del mapa, se comporta correctamente y el popover permanece visible pero si agrego el annotations
a la vista de mapa, entonces el popover
desaparece y no se llama al método delegate
. ¿Alguien ha encontrado este comportamiento antes?UIPopoverController descarta sin llamada de delegado
La única diferencia entre el código de encendido y apagado del interruptor es que uno elimina el annotations
de un conjunto, mientras que el otro agrega el annotations
. Esto es solo un problema cuando se agrega annotations
a la vista del mapa. Cualquier ayuda o sugerencias serán apreciadas.
Esta es la forma en que se muestre lo popover
:
-(IBAction)toggleMapFiltersView:(id)sender
{
LayerPopoverViewController *popOverViewController = [[LayerPopoverViewController alloc] init];
[popOverViewController setDelegate:self];
[popOverViewController setBranchesShowing:branchesShowing];
[popOverViewController setSchoolsShowing:schoolsShowing];
[layersButton setSelected:YES];
popoverController = [[UIPopoverController alloc] initWithContentViewController:popOverViewController];
[popoverController setDelegate:self];
[popOverViewController release];
[popoverController presentPopoverFromRect:layersButton.frame
inView:[self view]
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
Este es el método que se está llamando desde el punto de vista popover:
-(IBAction)toggleSchools:(id)sender
{
if ([self.delegate respondsToSelector:@selector(didChangeSchoolsDisplaySettingWithVisible:)])
{
if ([schoolsSwitch isOn])
{
[self.delegate didChangeSchoolsDisplaySettingWithVisible:YES];
self.schoolsShowing = YES;
}
else
{
[self.delegate didChangeSchoolsDisplaySettingWithVisible:NO];
self.schoolsShowing = NO;
}
}
}
y este es el método que se está refiriendo a:
-(void)didChangeSchoolsDisplaySettingWithVisible:(BOOL)visible
{
if (visible == YES)
{
schoolsShowing = YES;
if (self.schoolArray != nil && [self.schoolArray count] > 0)
{
for (MySchool *school in self.schoolArray)
{
[mapView addAnnotation:school];
}
}
}
else
{
schoolsShowing = NO;
for (id<MKAnnotation> annotation in mapView.annotations)
{
if ([annotation isKindOfClass:[MySchool class]])
{
[mapView removeAnnotation:annotation];
}
}
}
}
¿podría enviar algo de código, para que podamos ver lo que está sucediendo? – xCoder
agregó los dos métodos implicados – user1359733
Por favor, muéstrenos cómo se configura y muestra el popover. –