使用 ABNewPersonViewController 时关闭 UIPopoverController
Posted
技术标签:
【中文标题】使用 ABNewPersonViewController 时关闭 UIPopoverController【英文标题】:Dismissing UIPopoverController when using ABNewPersonViewController 【发布时间】:2010-09-30 09:13:10 【问题描述】:我有一个“添加联系人”按钮,当在 iPhone 上时,我以模态方式呈现带有 ABNewPersonController 的根视图控制器的导航控制器。
如果在 iPad 上我有一个弹出框,我可以在里面显示新的人控制器 - 很好。
问题出现在试图解雇时。
我可以在使用 didCompleteWithNewPerson 的实现中触摸完成或取消时关闭弹出框;
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】:来自文档:
在弹出窗口内的点击不会自动导致弹出窗口被关闭。您的视图和视图控制器代码必须显式处理弹出框内的操作和事件,并根据需要调用 dismissPopoverAnimated: 方法。
您应该使用 popover 委托方法 –popoverControllerShouldDismissPopover:
来监听它何时将被解除并在那里进行保存等。
另外,您应该使用self
而不是this
。
【讨论】:
我已经实现了 -popoverControllerShouldDismissPopover,如 OP 中所述,但控制似乎永远不会进入这里。我的意思是自我(c# 背景) 您是否将对象设置为UIPopoverControllerDelegate
?
@nevan 是的。我想引起解雇的是弹出框之外的触摸。
您需要发布更多代码。您似乎没有正确设置委托。
该代码中没有委托方法。是否实现了–popoverControllerShouldDismissPopover:
并符合UIPopoverControllerDelegate
?以上是关于使用 ABNewPersonViewController 时关闭 UIPopoverController的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)