关闭由 iOS 9 上的 segue 创建的 Popover
Dismissing a Popover created by a segue on iOS 9
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];
}
但这一点作用都没有。
我还尝试在弹出框内创建一个展开转场 viewController 并从呈现视图控制器调用它,但这会使应用程序崩溃。
刚试了一下,一切似乎都很完美。
- 您的视图控制器层次结构(导航控制器等)是什么?
- 您是否在显示弹出窗口的同一视图控制器上正确调用
dismissViewControllerAnimated:completion:
?
- 确保子视图控制器和导航控制器之间没有混淆。
- 您还可以记录弹出视图控制器的
presentingViewController
以进行检查。
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];
}
但这一点作用都没有。
我还尝试在弹出框内创建一个展开转场 viewController 并从呈现视图控制器调用它,但这会使应用程序崩溃。
刚试了一下,一切似乎都很完美。
- 您的视图控制器层次结构(导航控制器等)是什么?
- 您是否在显示弹出窗口的同一视图控制器上正确调用
dismissViewControllerAnimated:completion:
? - 确保子视图控制器和导航控制器之间没有混淆。
- 您还可以记录弹出视图控制器的
presentingViewController
以进行检查。