使用ABNewPersonViewController时关闭UIPopoverController

时间:2010-09-30 09:13:11

标签: iphone ios ipad uipopovercontroller

我有一个“添加联系人”按钮,当在iPhone上我以模态方式呈现带有ABNewPersonController的根视图控制器的导航控制器。

如果在iPad上我有一个popover,我可以用里面的新人控制器显示 - 很好。

试图解雇时会出现问题。

我可以在使用didCompleteWithNewPerson执行中触发完成或取消时忽略popover;

if(self.popoverController != nil)
    [popoverController dismissPopoverAnimated:YES];  

然而,当触摸弹出窗口外时,这并不会消失。

我已经为我的popoverControllerShouldDismissPopover方法返回了YES,并将我的popover的委托设置为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 :(得分:0)

来自文档:

  

弹出窗口内的点击不会自动导致弹出窗口被解除。您的视图和视图控制器代码必须显式处理popover中的操作和事件,并根据需要调用dismissPopoverAnimated:方法。

你应该使用popover委托方法–popoverControllerShouldDismissPopover:来监听它何时被解雇并在那里进行保存等。

此外,您应该使用self而不是this