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中构建我想要的界面.到目前为止效果很好.
dismissPopoverAnimated:是一种UIPopoverController阶级方法.所以,你需要在'root'视图控制器中有一个popover控制器引用.
MyRootViewController.myPopoverController = thePopover;
Run Code Online (Sandbox Code Playgroud)按钮位于"根"视图控制器中,并在其动作方法中:
[self.myPopoverController dismissPopoverAnimated:YES];
Run Code Online (Sandbox Code Playgroud)在iOS 8中,您可以在弹出窗口中关闭popover(如果它来自segue,至少)dismissViewControllerAnimated:completion:.但是,在iOS 7(或更低版本)中不起作用.
| 归档时间: |
|
| 查看次数: |
15418 次 |
| 最近记录: |