2

Apple のビュー コントローラー プログラミング ガイドには次のように記載されています(強調を追加)。

presentViewController:animated:completion: メソッドを呼び出すビュー コントローラーは、実際にモーダル プレゼンテーションを実行するものではない場合があります。プレゼンテーション スタイルは、View Controller の表示方法を決定します。これには、View Controller の表示に必要な特性が含まれます。たとえば、フルスクリーン プレゼンテーションは、フルスクリーン ビュー コントローラーによって開始される必要があります。現在表示しているビュー コントローラーが適切でない場合、UIKit は適切なビュー コントローラーが見つかるまでビュー コントローラー階層をたどります。モーダル プレゼンテーションが完了すると、UIKit は、影響を受けるビュー コントローラーの presentingViewController およびpresentedViewController プロパティを更新します。

UIPresentationController サブクラスを使用してカスタム ビュー コントローラー プレゼンテーションを実装しようとしています。ビューコントローラーを提示すると:

    let sb = UIStoryboard.init(name:"Main", bundle:nil)
    let presented = sb.instantiateViewController(withIdentifier:"PresentedTableViewController")

    presented.transitioningDelegate = overlayTransitioningDelegate
    presented.modalPresentationStyle = .custom

    definesPresentationContext = true
    present(presented, animated:true, completion:nil)

...presentingViewControllerプロパティは、プレゼンテーションを開始したビュー コントローラーよりも上位の階層にあるビュー コントローラーを参照します。UIModalPresentationStyle.customこれは、表示中のビュー コントローラーに必要な不可思議な要件を私が満たしていないことを示しているため、別の場所を探しました。

問題は、これらの要件がどこにも文書化されていないことです。また、それらを把握することもできません。プレゼンテーション コントローラで開始ビュー コントローラへの参照が必要です。そして、わかりました、自分で参照を提供することで問題を完全に回避できますが、無知な間違いを回避するコードを作成するよりも、正しい方法で物事を行うことを好みます.

を使用するときにView ControllerがプレゼンティングView Controllerとしての資格を得るために何をしなければならないか知っている人はいますUIModalPresentationStyle.customか? ありがとう!

4

0 に答える 0