如何设置Popover视图以正确关闭 [英] How to setup Popover views to dismiss properly
问题描述
一些工作后,我有一个popover视图显示自定义uiview里面它正常显示。
当你点击popover视图之外的时候,它会按照预期的那样消失,但是我也希望当它里面的按钮被点击时,它是否有任何人可以帮助我?努力找到一个简明的指南。
After some work I've got a popover view displaying a custom uiview inside of it appearing properly. When you tap outside of the popover view it dismisses as expected, however I'd also like it to dismiss when a button inside it is tapped, is there any one who can help me with that? Struggling to find a concise guide.
推荐答案
要手动关闭popover,您需要保留对它的引用。
To dismiss the popover manually, you'll need to keep a reference to it. A good place would be in the view controller that shows the popover.
要让内容视图控制器中的按钮告诉原始视图控制器(呈现弹出框),关闭popover,两种可能的方式是委托+协议或NSNotificationCenter。
To have the button inside the content view controller tell the original view controller (that presented the popover) to dismiss the popover, two of the possible ways are delegate+protocol or NSNotificationCenter.
下面的示例代码使用NSNotificationCenter 。
在.h (PresenterViewController),为popoverViewController添加一个属性:
In the .h of the view controller that presents the popover ("PresenterViewController"), add a property for the popoverViewController:
@interface PresenterViewController : UIViewController {
...
UIPopoverController *popoverController;
}
...
@property (nonatomic, retain) UIPopoverController *popoverController;
@end
在PresenterViewController的.m中:
In the .m of PresenterViewController:
@synthesize popoverController;
...
- (void)showPopover
{
if (self.popoverController == nil)
{
ContentFooViewController *content =
[[ContentFooViewController alloc] init];
UIPopoverController *popover = [[UIPopoverController alloc]
initWithContentViewController:content];
[content release];
self.popoverController = popover;
[popover release];
// Listen for the "done" notification which will be posted
// by the button in the content view controller.
// When the notification is received,
// call the contentFooViewControllerDone: method...
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(contentFooViewControllerDone:)
name:@"contentFooViewControllerDone"
object:popoverController.contentViewController];
}
[self.popoverController presentPopoverFromRect:...
// OR
[self.popoverController presentPopoverFromBarButtonItem:...
}
- (void)contentFooViewControllerDone:(NSNotification *)notification
{
// Button in content view controller was tapped, dismiss popover...
[self.popoverController dismissPopoverAnimated:YES];
}
- (void)dealloc
{
//stop listening for notifications and release popoverController...
[[NSNotificationCenter defaultCenter] removeObserver:self];
[popoverController release];
[super dealloc];
}
在内容视图控制器中,实现按钮抽头方法如下: p>
In the content view controller, implement the button tap method as follows:
- (IBAction)dismissButtonTapped
{
[[NSNotificationCenter defaultCenter]
postNotificationName:@"contentFooViewControllerDone" object:self];
}
这篇关于如何设置Popover视图以正确关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!