2

我创建了一个UIPopoverController并在单击时将其添加到视图控制器UIButton中,如下所示

- (void)viewDidLoad
{
    [super viewDidLoad];
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
}

- (IBAction)showPopover:(UIButton *)sender
{
    if ([popoverController isPopoverVisible]) {
        [popoverController dismissPopoverAnimated:YES];
    } else {
               CGRect popRect = CGRectMake(self.btnShowPopover.frame.origin.x,
                                self.btnShowPopover.frame.origin.y,
                                self.btnShowPopover.frame.size.width,
                                self.btnShowPopover.frame.size.height);
          [popoverController presentPopoverFromRect:popRect
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];
    }
}

btnShowPopoverUIButtonviewcontrollerpopoverControllerUIPopoverController

popovercontroller单击按钮时看起来很好。

但是当我UIButton单击secondviewcontroller

我为此使用了以下代码

-(IBAction)y:(id)sender{
    fs =  [[Firstviewcontroller alloc] initWithNibName:@"FIrstscreen" bundle:[NSBundle mainBundle]];
    [fs.popoverController dismissPopoverAnimated:TRUE];
}

但它没有用。

popovercontroller单击添加到的视图控制器中的按钮时如何关闭popovercontroller

4

2 回答 2

9

您正在分配 的新实例Firstviewcontroller,因此它不会关闭前一个实例的弹出框。

当您显示弹出框时,您需要传递旧实例,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
    [controller setFs:self]
}

并解雇像:

-(IBAction)y:(id)sender
{
    [fs.popoverController dismissPopoverAnimated:TRUE];
}
于 2013-01-14T11:08:59.527 回答
4

苹果文档:

弹出框控制器不会调用此方法来响应对该方法的编程调用dismissPopoverAnimated:。如果您以编程方式关闭弹出框,则应在调用 dismissPopoverAnimated: 方法后立即执行任何清理操作。

所以didDimiss委托的方法不会被自己调用。

尝试:

[self.popover dismissPopoverAnimated:YES];
[self.popover.delegate popoverControllerDidDismissPopover:self.PopUp];
于 2013-01-14T11:08:46.487 回答