2

これについては 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 内にアンワインド セグエを作成し、表示中のビュー コントローラからそれを呼び出そうとしましたが、アプリがクラッシュします。

4

1 に答える 1

3

試してみたところ、すべてが完璧に機能しているようです。

  • ビュー コントローラーの階層 (ナビゲーション コントローラーなど) は何ですか?
  • dismissViewControllerAnimated:completion:ポップオーバーを表示したのと同じビュー コントローラーを適切に呼び出していますか?
  • 子ビュー コントローラーとナビゲーション コントローラーが混同されていないことを確認します。
  • ポップオーバー ビュー コントローラーをログに記録しpresentingViewControllerて確認することもできます。
于 2015-12-09T13:15:36.160 に答える