iPad使用弹出窗口中的按钮关闭popover

Mrw*_*lfy 3 ipad dismiss uipopovercontroller appdelegate

我的弹出控制器中有一个按钮.我想用它来消除popover,所以我试图访问呈现视图控制器("根"视图控制器)的方法(dismissPopover).

注意:解除弹出窗口的方法已在根VC中设置并正常工作,它是委托.如果我打电话它会解雇popover.我只需要从popover访问该方法.

要做到这一点,我成立了一个属性在AppDelegate中,并获得rootVC这样的实例:self.rootController = (ViewController*)self.window.rootViewController;.然后我将根VC类和AppDelegate导入到popover的视图控制器类中,如下所示.似乎给我访问rootVC和方法,但结果不会触发该方法.知道我在这里缺少什么吗?

#import "ViewController.h"
#import "AppDelegate.h"
Run Code Online (Sandbox Code Playgroud)

连接到按钮的操作:

- (IBAction)dismissPopover:(id)sender {

//Checking the button works, it does:
NSLog(@"dismissPopover, from popover");

//Trying to get an instance of the rootViewController, the "presenting view controller"                                  
ViewController *rootVC = [(AppDelegate *)[[UIApplication sharedApplication] delegate] rootController];

//trying to access the method in the rootVC that dismisses the popover
[rootVC dismissPopover];

//Tried the following code, does nothing:
//[self dismissPopoverAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

注意:我最终放弃使用弹出窗口,因为它变得有点过于复杂.我尝试将视图控制器加载到UIView中(因此我可以将笔尖的内容加载到弹出视图中).这也变得有点复杂.所以,现在我只是以编程方式在UIView中构建我想要的界面.到目前为止效果很好.

Wub*_* Li 8

  1. dismissPopoverAnimated:是一种UIPopoverController阶级方法.所以,你需要在'root'视图控制器中有一个popover控制器引用.

    MyRootViewController.myPopoverController = thePopover;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 按钮位于"根"视图控制器中,并在其动作方法中:

    [self.myPopoverController dismissPopoverAnimated:YES];
    
    Run Code Online (Sandbox Code Playgroud)


lew*_*uez 8

在iOS 8中,您可以在弹出窗口中关闭popover(如果它来自segue,至少)dismissViewControllerAnimated:completion:.但是,在iOS 7(或更低版本)中不起作用.