如何设置Popover视图以正确关闭 [英] How to setup Popover views to dismiss properly

查看:133
本文介绍了如何设置Popover视图以正确关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一些工作后,我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆