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

时间:2013-01-14 07:47:49

标签: ipad uipopovercontroller dismiss appdelegate

我的弹出式控制器中有一个按钮。我想用它来关闭popover,所以我试图访问呈现视图控制器的方法(dismissPopover)(“根”视图控制器)。

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

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

#import "ViewController.h"
#import "AppDelegate.h"

连接到按钮的操作:

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

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

5 个答案:

答案 0 :(得分:8)

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

    MyRootViewController.myPopoverController = thePopover;
    
  2. 按钮位于“根”视图控制器中,并在其操作方法中:

    [self.myPopoverController dismissPopoverAnimated:YES];
    

答案 1 :(得分:8)

在iOS 8中,您可以从弹出窗口中删除带有dismissViewControllerAnimated:completion:的弹出窗口(如果它来自segue,至少)。但是,它不适用于iOS 7(或更低版本)。

答案 2 :(得分:3)

Popover在点击外部时会自动关闭,当您点击按钮关闭它时,您只需在dismissPopover方法中使用以下代码:

         [self.popoverController dismissPopoverAnimated:YES];

你不需要这些繁琐的工作!

答案 3 :(得分:1)

[self dismissViewControllerAnimated:YES completion:nil];

是解决方案; 您只需要一个IBoutlet或添加目标到您的按钮,然后调用上面的行

答案 4 :(得分:-1)

我遇到了同样的问题

只需按下buttonClickMethod:

即可
[yourPopoverController dismissPopoverAnimated:YES];
希望你能帮忙!

欢呼声