在iOS 9上解雇由segue创建的Popover

时间:2015-12-09 10:40:40

标签: ios uipopover uipresentationcontroller

Stack Overflow上有很多问题和答案,但它们只适用于iOS 8及之前。

iOS 9弃用了很多东西,SO上的答案不再适用了。

说,我通过像这样执行一个segue来呈现一个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。如果用户隐藏键盘,我想解除popover。

所以我这样做了:

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

然后

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

但这根本没有效果。

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

1 个答案:

答案 0 :(得分:3)

刚尝试过,这一切看起来都很完美。

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