Увольнение UIPopoverController при использовании ABNewPersonViewController - PullRequest
0 голосов
/ 30 сентября 2010

У меня есть кнопка «Добавить контакт», которая, когда на 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 реализован правильно.(?)

Я предполагаю, что я могу запутать проблему, имея несколько контроллеров, а мой метод делегата popover скрыт или что-то в этом роде?

Заранее спасибо

РЕДАКТИРОВАТЬ - Метод делегата

-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)thePopoverController{
    NSLog(@"clicked outside the popover");//never prints
    return YES;
    }

1 Ответ

0 голосов
/ 30 сентября 2010

Из документов:

Нажатие внутри всплывающего окна не приводит к автоматическому отклонению всплывающего окна. Ваш код контроллера представления и просмотра должен явно обрабатывать действия и события внутри всплывающего окна и вызывать метод dismissPopoverAnimated: при необходимости.

Вы должны использовать методы делегата popover –popoverControllerShouldDismissPopover:, чтобы прослушивать, когда он собирается быть уволен, и сохранять и т. Д. Там.

Кроме того, вы должны использовать self, а не this.

...