从 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”而终止应用程序,原因:“应用程序试图在自身上呈现模态视图控制器。呈现控制器是这会对你有所帮助:
[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