3

送信してからUIViewControllerロードしたことがわかりました(アプリのメインのストーリーボードではありません)。UIStoryboardinitialViewController

そのストーリーボードで使用されているアンワインド セグエがあります。その出口点は、メインのUIViewControllerシーンに存在する のアンワインド アクションにあります。 UIStoryboard

このView Controllerをセグエではなくコードで表示します。

ロードされたビュー コントローラーを で提示するとpresentViewController:animated:completion:、アンワインド セグエが正常に機能し、適切なハンドラーが見つかります。

ただし、表示されたビュー コントローラーを でラップしてからポップオーバーを表示すると、アンワインド セグエが機能しません。UIPopoverControllerアンワインド アクションをブレークポイントできますが、呼び出されません。

アンワインド セグエがどのように機能するかに関するテクニカル ノートで、Apple は宛先ビュー コントローラーを検索するプロセスについて説明しています。

アンワインド セグエが宛先ビュー コントローラーを決定する方法 アンワインド セグエが開始されると、アンワインド セグエの作成時に指定されたアンワインド アクションを実装するナビゲーション階層で最も近いビュー コントローラーを最初に見つける必要があります。このビュー コントローラーは、アンワインド セグエの宛先になります。適切なビュー コントローラーが見つからない場合、アンワインド セグエは中止されます。

アンワインド セグエを開始したビュー コントローラーから始まる検索順序は次のとおりです。

  1. レスポンダ チェーンの次のビュー コントローラにviewControllerForUnwindSegueAction:fromViewController:withSender:メッセージが送信されます。モーダルに表示されるビュー コントローラの場合、これは を呼び出したビュー コントローラになりますpresentViewController:animated:completion:。それ以外の場合は、parentViewController. childViewControllersデフォルトの実装では、アンワインド アクションを処理するビュー コントローラーをレシーバーの配列で検索します。レシーバーの子ビュー コントローラーのいずれもアンワインド アクションを処理しない場合、レシーバーはアンワインド アクションを処理するかどうかを確認し、処理する場合は self を返します。どちらの場合も、このcanPerformUnwindSegueAction:fromViewController:withSender:メソッドを使用して、特定のビュー コントローラーがアンワインド アクションを処理する必要があるかどうかを判断します。

  2. viewControllerForUnwindSegueAction:fromViewController:withSender:ステップ 1 でView Controller が返されない場合、レスポンダー チェーン内の次の View Controller から検索が繰り返されます

(2 番目の点を強調していることに注意してください。)

だから、私が見る限り、私がやっていることは、どういうわけか、うまくいくはずです. アンワインド セグエは、レスポンダー チェーンを、提示されたビュー コントローラーからUIPopoverController出て、それを提示しているものに出入りし、チェーンを上って、最終的にアンワインド ハンドラーを見つけます。

しかし、それは機能していません。アイデアはありますか?

4

0 に答える 0