У меня есть представление карты, из которого я добавляю и удаляю annotations
на основе переключателя в popovercontroller
. Когда я касаюсь за пределами popover
, он правильно закрывается и вызывает метод delegate
popoverControllerDidDismissPopover:
. Проблема, с которой я сталкиваюсь, заключается в том, что когда я переключаю переключатель в popover
(, касаясь во всплывающем окне ),если я удаляю annotations
с карты, он ведет себя правильно, и всплывающее окно остается видимым, но если я добавляю annotations
в представление карты, тогда popover
исчезает, а метод delegate
не вызывается. Кто-нибудь сталкивался с таким поведением раньше?
Единственная разница между кодом включения и выключения переключателя заключается в том, что один из них удаляет annotations
из массива, а другой добавляет annotations
. Это проблема только при добавлении annotations
в вид карты. Любая помощь или предложения будут оценены.
Вот как отображается 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];
}
Это метод, который вызывается из всплывающего окна:
-(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;
}
}
}
и это метод, на который он ссылается:
-(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];
}
}
}
}