我的弹出式控制器中有一个按钮。我想用它来关闭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中构建我想要的界面。到目前为止效果很好。
答案 0 :(得分:8)
dismissPopoverAnimated:
是UIPopoverController
类的方法。所以,你需要在'root'视图控制器中有一个popover控制器引用。
MyRootViewController.myPopoverController = thePopover;
按钮位于“根”视图控制器中,并在其操作方法中:
[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];
希望你能帮忙!
欢呼声