これについては Stack Overflow で多くの質問と回答がありますが、それらは iOS 8 以前でのみ有効です。
iOS 9 は多くのことを廃止し、SO の回答は機能しなくなりました。
とはいえ、このようなセグエを実行してポップオーバーを提示しています
[self performSegueWithIdentifier:@"myPopover" sender:self];
このセグエは、現在の viewController とポップオーバーで使用される 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 内にアンワインド セグエを作成し、表示中のビュー コントローラからそれを呼び出そうとしましたが、アプリがクラッシュします。