2

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,并且此对象不再提供驳回 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 并从呈现视图控制器中调用它,但这会使应用程序崩溃。

4

1 回答 1

3

刚刚尝试过,一切似乎都完美无缺。

  • 您的视图控制器层次结构(导航控制器等)是什么?
  • 您是否正确调用dismissViewControllerAnimated:completion:了显示弹出框的同一视图控制器?
  • 确保子视图控制器和导航控制器之间没有混淆。
  • 您还可以记录弹出视图控制器presentingViewController以进行检查。
于 2015-12-09T13:15:36.160 回答