我々は、個々の機能のために別々のクラスにパッケージ化されている場合、我々は可能な限り独立したこのクラスは、それによって外への依存を減らすことを願っています。例えば、我々は、ABPeoplePickerNavigationControllerのうち提示することができるコントローラは、もちろん、我々は外部のコントローラを介して電流を流すことができるがなければならない別のパッケージのアドレス帳のクラスを取得したいが、私はかなりぎこちない感じたので、あなたは、クラス内で得ることができる方法現在のコントローラーはそれを表示されていますか?
我々は現在、直接表示されている制御装置を得ることができないが、各アプリケーションが一つだけのメインウィンドウを有しているが、我々はこのUIWindowオブジェクトを取得し、その後、何らかの方法で、現在のコントローラに横断できます。keyWindowだけrootViewController、コントローラのいずれかUITabBarControllerまたはサブクラス、どちらかUINavigationControllerまたはサブクラス、いずれかのUIViewControllerまたはサブクラスでは、コントローラは、それらによってプッシュがあり、私たちはそれを呼び出してみましょう(〜!〜)、それを提示した後、あなたは再帰的に、私は非常に機知に富んだありませんでしたか?
ここで私たちは分類を議論してみましょう:
AがUITabbarControllerまたはサブクラスである場合、A)、我々は容易に通過することができ、容易に次のレベルコントローラselectedViewController特性を見つけます。
AはUINavigationControllerまたはサブクラスである場合b)に示すように、我々ができ、コントローラにコントローラvisibleViewController特性のうち最終のプッシュを取得します。
AはのUIViewControllerまたはサブクラスである場合c)は、コントローラは、唯一の新しい方法コントローラの存在を示すように、コントローラを表示したいので、私たちはすることができます
コントローラは、ブランクに既にある場合presentedViewControllerが示されている、ヌル制御部で取得されていません。
トップ3例では、コントローラのすべてのタイプをカバーしているので、我々は、コントローラが現在再帰によって表示されている見つけることができます。
次のようにメインのコードは次のとおりです。
それは達成することのように見えますが、慎重に分類する必要があります。欠点はどこだろうと思いますか?
例えば、私はアニメーションが新しいページをプッシュ使用することを選択したし、このメソッドを呼び出して、買収はアニメーションコントローラの前にあります。