2

いくつかの UINavigationControllers を含む UITabbarMoreController があります。これらの UINavigationControllers には、カスタム ビュー コントローラーが含まれます。

したがって、階層は次のようになります。

UITabbarController
 - UINavigationController
  -> my custom UIViewController
 - ...(other children of UITabbarController look the same)

カスタム ビュー コントローラー内から[self parentViewController]、UINavigationController を返す呼び出しを行います。そして、これは実際に起こります。私は実際に UINavigationController を取得しますが、特定の UINavigationController が moreNavigationController 内にない場合のみです。

タブバー コントローラーには多くの子コントローラーがあるため、タブバー コントローラーは moreNavigationController を作成します。moreNavigationController の下にあるビューコントローラーを開いて呼び出す[self parentViewController]と、クラス UIMoreNavigationController を持つ不思議なオブジェクトが返されます

UIMoreNavigationController ではなく、View Controller の親である UINavigationController を取得する必要があります。また、[self navigationController]同じ結果で使用してみました。ビューコントローラーの実際に最も近い親への参照を取得するにはどうすればよいですか? 事前に助けてくれてありがとう!

4

1 に答える 1

4

要するに、できません。

Apple は常にコードを最適化しようとします。ここでの最適化の 1 つは、ViewControllerそのリストに表示されてUIMoreNavigationControllerいる が typeであるかどうかを確認することUINavigationControllerです。それ自体が UINavigationController であるためUIMoreNavigationController、別の を作成したくありませんUINavigationControllerUINavigationControllerネストを回避しようとしています。

UIMoreNavigationControllerのヘッダー ファイルを見ると、実際に作成しUINavigationController* _originalNavigationController;た元のものUINavigationControllerであり、アクセスしたい変数 があることがわかります。残念ながらUIMoreNavigationControllerプライベートなのでできません。

回避策(醜い)

NavigationController の参照をそのスタックにプッシュするときに、その子に渡します。

于 2012-08-15T09:43:49.653 に答える