从 UIPopoverController 出现时关闭 PresentedViewController

Posted

技术标签:

【中文标题】从 UIPopoverController 出现时关闭 PresentedViewController【英文标题】:Dismiss PresentedViewController while present from UIPopoverController 【发布时间】:2014-08-01 04:39:43 【问题描述】:

popoverview 中的PresentedViewController,这是我正在使用的代码

SearchPropertyVC *SearchPropertyVC *centerViewController = (SearchPropertyVC *)[board instantiateViewControllerWithIdentifier:@"vcSearchPropertyID"];
UINavigationController *ConDetVC = [[UINavigationController alloc] initWithRootViewController:centerViewController];
ConDetVC.modalPresentationStyle = UIModalPresentationPageSheet;
ConDetVC.modalPresentationStyle = UIModalPresentationFormSheet;
ConDetVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:ConDetVC animated:YES completion:nil];
ConDetVC.view.superview.bounds = CGRectMake(0, 0, 700, 670);

控制器打开正常,当我尝试关闭控制器时收到此警告

“警告:在演示或关闭过程中尝试从视图控制器关闭!”

之后,如果我点击任何按钮,应用程序就会崩溃。

这是我用来关闭视图的代码

[self dismissViewControllerAnimated:YES completion:nil];

[self dismissViewControllerAnimated:YES completion:^
             [(UINavigationController *)self.presentingViewController popToRootViewControllerAnimated:YES];
         ];

if (![self.presentedViewController isBeingDismissed])
            [self dismissViewControllerAnimated:YES completion:nil];

当我尝试关闭弹出视图本身时收到相同的警告

【问题讨论】:

对于 popOverView 设置属性如 @property(nonatomic,retain) UIPopoverController *popOverControlObj;我希望它会起作用。 您可以延迟放松或弹出。 在呈现 ConDetVC 视图之前,您是否呈现过任何其他视图?如果是,那么您必须先关闭该视图 去掉这行试试[(UINavigationController *)self.presentingViewController popToRootViewControllerAnimated:YES]; 我添加了延迟并尝试关闭 popoverview 但 popover 和 presentingViewController 都将关闭。 【参考方案1】:

一开始是正确的。

 SearchPropertyVC *SearchPropertyVC *centerViewController = (SearchPropertyVC *)[board instantiateViewControllerWithIdentifier:@"vcSearchPropertyID"];

 SearchPropertyVC *searchPropertyVC = (SearchPropertyVC *)[board instantiateViewControllerWithIdentifier:@"vcSearchPropertyID"];

选择任何一种演示风格,

 ConDetVC.modalPresentationStyle = UIModalPresentationPageSheet;
 ConDetVC.modalPresentationStyle = UIModalPresentationFormSheet;

页表或表单。

当你尝试呈现时,使用你想要呈现的视图控制器的对象。

 [self presentViewController:ConDetVC animated:YES completion:nil]; 

当它被解雇时,只需写,

 [self dismissViewControllerAnimated:YES completion:^
         // write you code here
     ];

【讨论】:

[ConDetVC presentViewController:ConDetVC 动画:YES 完成:nil];这将得到错误...由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在自身上呈现模态视图控制器。呈现控制器是 .' 其实这是我想做的过程——从viewcontroll->barbutton点击->popoverview(按钮点击这里)->(需要关闭popupview)打开一个模型presentviewcontroller(按钮点击)- >(关闭presentviewcontroller)打开一个新的presentviewcontroller。如果我点击了presentviewcontroller需要关闭presentviewcontroller。 @Rajesh,我很抱歉我的错误。请参阅编辑后的答案。 我解决了所有问题,现在我只有一个问题,当我们在窗口外点击时需要关闭presentviewcontroller... 找到呈现的视图控制器后,您可以在触摸事件中关闭呈现的视图控制器【参考方案2】:

这会对你有所帮助:

 [self.presentedViewController dismissViewControllerAnimated: YES completion:^(void) 
             [self presentViewController:myController animated:YES completion:nil];
    ];

【讨论】:

以上是关于从 UIPopoverController 出现时关闭 PresentedViewController的主要内容,如果未能解决你的问题,请参考以下文章

当键盘出现时,UIPopoverController 在 iOS 7 上奇怪地移动

旋转时,从 UITableViewCell 显示的 UIPopoverController 放置不正确

自动旋转时出现 UIPopOverController 问题

UIPopoverController、Xcode 6、IOS 8 使用 Swift

UIPopoverController?在弹出框控制器外点击时无法关闭

如何从 UIPopoverController 呈现模态视图?