如何解雇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]; } }
btnShowPopover
是viewcontroller
的UIButton
, popoverController
是UIPopoverController
。
点击button时, popovercontroller
显示正常。
但是,当我点击第二个secondviewcontroller
的UIButton
时,它不会被解雇
我使用了下面的代码
-(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];