3

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

注意:关闭弹出框的方法已经在根 VC(即委托)中设置并工作。如果我调用它,它将关闭弹出窗口。我只需要从弹出框访问该方法。

为此,我在 AppDelegate 中设置了一个属性,并获得了一个 rootVC 的实例,如下所示self.rootController = (ViewController*)self.window.rootViewController;:然后我将根 VC 类和 AppDelegate 导入到弹出窗口的视图控制器的类中,如下所示。似乎让我可以访问 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 中(这样我就可以将 nib 的内容加载到弹出视图中)。这也变得有点复杂。所以,现在我只是以编程方式在 UIView 中构建我想要的界面。到目前为止效果很好。

4

5 回答 5

8
  1. dismissPopoverAnimated:UIPopoverController类的方法。因此,您需要在“根”视图控制器中引用弹出框控制器。

    MyRootViewController.myPopoverController = thePopover;
    
  2. 该按钮在您的“根”视图控制器中,并且在它的操作方法中:

    [self.myPopoverController dismissPopoverAnimated:YES];
    
于 2013-01-14T10:01:10.873 回答
8

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

于 2014-10-01T19:30:28.127 回答
3

在弹出框外部单击时会自动关闭它,当您订购一个按钮来关闭它时,您可以简单地在您的 dismissPopover 方法中使用以下代码:

         [self.popoverController dismissPopoverAnimated:YES];

你不需要所有这些乏味的工作!

于 2013-01-14T09:21:05.813 回答
1

[self dismissViewControllerAnimated:YES completion:nil];

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

于 2017-02-27T11:55:14.143 回答
-1

我有同样的问题

只需在您的 buttonClickMethod 中执行:

[yourPopoverController dismissPopoverAnimated:YES];

希望你帮忙!

干杯

于 2014-07-02T16:03:29.397 回答