У меня есть кнопка «добавить контакт», с помощью которой на iPhone я представляю контроллер навигации с контроллером корневого представления ABNewPersonController модально.
Если на iPad у меня есть всплывающее окно, которое я могу отображать с помощью контроллера нового человека внутри - хорошо.
Проблема возникает при попытке уволить.
Я могу закрыть всплывающее окно, нажав «Готово» или «Отменить» в моей реализации didCompleteWithNewPerson using;
if(self.popoverController != nil)
[popoverController dismissPopoverAnimated:YES];
Тем не менее, это не означает, что вы касаетесь вне всплывающего окна.
Я вернул ДА для моего метода popoverControllerShouldDismissPopover и установил делегат моего всплывающего окна на this
. Я поместил NSLOG в этот метод, и он не пропадает - я что-то упускаю?
Кто-нибудь знает, как убрать всплывающее окно при касании снаружи?
Обновление - дополнительный код
-(IBAction)contactsClicked:(id) sender{
ABNewPersonViewController *newPersonView = [[ABNewPersonViewController alloc] init];
[newPersonView setNewPersonViewDelegate:self];
[newPersonView setDisplayedPerson:newPerson];
UINavigationController *addContactNavController = [[UINavigationController alloc] initWithRootViewController:newPersonView];
[newPersonView release];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if(self.popoverController == nil){
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:addContactNavController];
self.popoverController = popover;
self.popoverController.delegate = self;
[popover release];
}
CGRect frame = [sender frame];
[popoverController presentPopoverFromRect:frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
} else {
[self presentModalViewController:addContactNavController animated:YES];
[addContactNavController release];
}
}
-(void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView didResolveToPerson:(ABRecordRef)person{
[self dismissModalViewControllerAnimated:YES];
}
-(void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person {
NSLog(@"DONE OR CANCEL clicked!!!!"); //prints
if (self.popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
[self dismissModalViewControllerAnimated:YES];
}
Кнопки «Готово» и «Отмена» на новом контроллере работают, закрывая контроллер и всплывающее окно (при работе на iPad). Я предполагаю, что это означает, что делегат для ABNewPersonViewController реализован правильно. (?)
Я предполагаю, что могу запутать проблему из-за наличия нескольких контроллеров, а мой метод делегата всплывающего окна скрывается или что-то в этом роде?
заранее спасибо
EDIT - метод делегирования
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)thePopoverController{
NSLog(@"clicked outside the popover");//never prints
return YES;
}