在 iOS 9 上关闭由 segue 创建的 Popover

Posted

技术标签:

【中文标题】在 iOS 9 上关闭由 segue 创建的 Popover【英文标题】:Dismissing a Popover created by a segue on iOS 9 【发布时间】:2015-12-09 10:40:39 【问题描述】:

Stack Overflow 上有很多关于此的问题和答案,但它们仅适用于 ios 8 及之前的版本。

iOS 9 弃用了很多东西,所以关于 SO 的答案不再有效。

也就是说,我通过执行这样的 segue 来呈现一个弹出框

[self performSegueWithIdentifier:@"myPopover" sender:self];

这个 segue 在当前 viewController 和 popover 使用的 viewController 之间创建。不涉及任何按钮。弹出框被锚定到一个视图。

问题在于prepareForSegue:identifier

[segue destinationViewController]

UIViewController

[[segue destinationViewController] popoverPresentationController]

是新的UIPopoverPresentationController,这个对象不再提供dismiss api。

相反,我们应该使用

[self dismissViewControllerAnimated:YES completion:nil];

关闭弹出框,但这对我没有影响。

我的情况是这样的:我有一个带有文本字段的弹出框。如果用户隐藏键盘,我想关闭弹出框。

所以我这样做了:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

然后

- (void)keyboardWillHide:(NSNotification *)notification 
  [self dismissViewControllerAnimated:YES completion:nil];

但这根本没有效果。

我还尝试在 popover viewController 中创建一个 unwind segue,并从呈现视图控制器中调用它,但这会使应用程序崩溃。

【问题讨论】:

看到这个链接可能对你有帮助***.com/questions/28719306/… 或者这个***.com/questions/33468698/… @iAnurag - 你提到的问题没有告诉我我所问的......“如何解雇”不存在。 @Anbu.Karthik - self presentingViewController 在弹出视图控制器中给我 nil。 你的keyboardWillHide:方法在哪个类? 【参考方案1】:

刚刚试了一下,似乎一切正常。

您的视图控制器层次结构(导航控制器等)是什么? 您是否在显示弹出框的同一视图控制器上正确调用 dismissViewControllerAnimated:completion:? 确保子视图控制器和导航控制器之间没有混淆。 您还可以登录弹出视图控制器的presentingViewController 进行检查。

【讨论】:

以上是关于在 iOS 9 上关闭由 segue 创建的 Popover的主要内容,如果未能解决你的问题,请参考以下文章

iOS 9 push segue 导致我的应用程序崩溃

如何关闭segue ios8

在 iOS 9.0 之前,只有自定义 segues 支持类名

iOS - 在segue上意外旋转回纵向

解析 iOS SDK:PFTableViewCell 内的 UIButton segue [关闭]

在 iOS 5 上使用 Segues/Storyboard 弹出当前视图