在iOS 9上删除由segue创建的Popover



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

iOS9否决了很多东西,SO上的答案不再有效。

也就是说,我通过表演像这样的片段来展示一个popover

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

这个segue是在当前viewController和popover使用的viewController之间创建的。没有涉及按钮。popover固定在一个视图上。

问题是在prepareForSegue:identifier

[segue destinationViewController]

UIViewController

[[segue destinationViewController] popoverPresentationController]

是新的UIPopoverPresentationController,并且该对象不再提供驳回api。

相反,我们应该使用

[self dismissViewControllerAnimated:YES completion:nil];

解雇popover,但这对我没有影响。

我的情况是:我有一个带有文本字段的popover。如果用户隐藏键盘,我想取消弹出窗口。

所以我做了这个:

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

然后

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

但这根本没有效果。

我还尝试在popover视图控制器中创建一个展开段,并从呈现视图控制器调用它,但这会导致应用程序崩溃。

刚试过,一切似乎都很完美。

  • 您的视图控制器层次结构是什么(导航控制器等)
  • 您是否正确地在呈现popover的同一视图控制器上调用dismissViewControllerAnimated:completion:
  • 确保子视图控制器和导航控制器之间没有混淆
  • 您也可以记录popover视图控制器的presentingViewController以进行检查

最新更新