繁体   English   中英

使用ABNewPersonViewController时关闭UIPopoverController

[英]Dismissing UIPopoverController when using ABNewPersonViewController

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

如果在iPad上,我有一个弹出窗口,可以在其中显示新的person控制器-很好。

尝试解雇时出现问题。

我可以在触摸完成时关闭弹出窗口,或者在我的didCompleteWithNewPerson实现中使用取消;

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

但是,触摸弹窗外时并不能消除这种情况。

我为popoverControllerShouldDismissPopover方法返回了YES,并将我的弹出窗口的委托设置为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;
    }

从文档:

弹出窗口内的水龙头不会自动导致弹出窗口被关闭。 您的视图和视图控制器代码必须显式处理弹出框内的动作和事件,并根据需要调用dismissPopoverAnimated:方法。

您应该使用–popoverControllerShouldDismissPopover:委托方法–popoverControllerShouldDismissPopover:监听即将被关闭的时间并在那里进行保存等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM