【问题标题】:iPad dismiss popover with button within the popover itselfiPad使用弹出框本身内的按钮关闭弹出框
【发布时间】:2012-12-28 04:44:53
【问题描述】:

我的弹出框控制器中有一个按钮。我想用它来关闭弹出框,所以我试图访问呈现视图控制器(“根”视图控制器)的方法(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 中构建我想要的界面。到目前为止效果很好。

【问题讨论】:

    标签: ipad uipopovercontroller dismiss appdelegate


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

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

      [self.myPopoverController dismissPopoverAnimated:YES];
      

    【讨论】:

    • 有趣。好吧,该方法已经从我要访问的类中起作用。我想,只需要从弹出窗口访问该方法,我就完成了。但我会考虑一下您的解决方案。
    【解决方案2】:

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

    【讨论】:

    • 这是我直觉做的,弹出框消失了。问题是:当我以编程方式执行此操作时,没有调用我的 PopoverPresentationControllerDelegate。但是它被称为,如果我在弹出框之外点击它会自动关闭。我还需要做些什么,才能正确通知我的代表吗?
    【解决方案3】:

    在弹出框外部单击时会自动关闭,当您订购按钮以关闭它时,您只需在 dismissPopover 方法中使用以下代码:

             [self.popoverController dismissPopoverAnimated:YES];
    

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

    【讨论】:

    • 谢谢!但我知道。当你在它外面点击时,我不希望它消失。我只希望它在点击按钮时关闭。这是为了省去我在其他领域的一些更繁琐的工作。
    • 我的意思是,在你的操作方法中使用这个方法来关闭它,我在类似的情况下使用它顺便说一句
    • 在“X *”类型的对象上找不到属性“popoverController”
    【解决方案4】:

    [self dismissViewControllerAnimated:YES completion:nil];

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

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题

      只需在您的 buttonClickMethod 中执行:

      [yourPopoverController dismissPopoverAnimated:YES];
      

      希望你能帮忙!

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-20
        • 2014-02-26
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 2013-07-14
        • 2014-10-06
        相关资源
        最近更新 更多