如何解雇UIPopoverController?

我已经创build了一个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]; } } 

btnShowPopoverviewcontrollerUIButtonpopoverControllerUIPopoverController

点击button时, popovercontroller显示正常。

但是,当我点击第二个secondviewcontrollerUIButton时,它不会被解雇

我使用了下面的代码

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

但它没有工作。

如何在点击添加到popovercontroller的viewcontoller中的button时closurespopovercontroller

您正在分配一个Firstviewcontroller的新实例,所以它不会消​​除先前实例的popup窗口。

在显示popup窗口时,您需要传递旧实例:

 - (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]; } 

苹果文档:

popover控制器不会响应编程调用dismissPopoverAnimated:方法而调用此方法。 如果以编程方式closurespopup窗口,则应在调用dismissPopoverAnimated:方法后立即执行任何清理操作。

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

尝试:

 [self.popover dismissPopoverAnimated:YES]; [self.popover.delegate popoverControllerDidDismissPopover:self.PopUp];